- 论坛徽章:
- 0
|
金山软件招聘题目
我写了个第二题的,不知道对不对(omg,忘了考虑负数)
- //mul.c
- #include <stdio.h>;
- #include <stdlib.h>;
- #include <ctype.h>;
- int A[256],B[256];
- int Alen,Blen;
- int M[256*2];
- void InputAB();
- void Print(int *Array, int len);
- void Mul(int *Array, int len, int n, int *Result, int zeros);
- void Add(int *total, int tlen, const int *add, int alen);
-
- int main(int argc, char **argv){
- int i;
- int tmp[256*2];
- InputAB();
- Print(A,Alen);
- putchar('*');
- Print(B,Blen);
-
- puts("-----");
-
- for (i = Blen-1; i >;= 0; i--){
- Mul(A, Alen, B[i], tmp, Blen - 1 -i);
- Print(tmp, Alen + 1);
- Add(M, 256*2, tmp, Alen + Blen - i);
- }
-
- puts("-----");
-
- Print(M, 256*2);
- exit(0);
- }
- void InputAB(){
- int c;
-
- while (!isdigit(c = getchar()));
- A[0] = c - '0';
- Alen=1;
- while (isdigit(c = getchar()))
- A[Alen++] = c - '0';
-
- while (!isdigit(c = getchar()));
- B[0] = c - '0';
- Blen = 1;
- while (isdigit(c = getchar()))
- B[Blen++] = c - '0';
- }
- void Print(int *Array, int len){
- int i=0;
- while ((i<len) && (Array[i] == 0) ) i++;
- if (i == len){
- putchar('0');
- putchar('\n');
- return;
- }
- for ( ;i < len; i++)
- putchar(Array[i]+'0');
- putchar('\n');
- }
- void Mul(int *Array, int len, int n, int *Result, int zeros){
- int i;
- for (i = len - 1; i >;= 0; i--)
- Result[i+1] = Array[i]*n;
- Result[0] = 0;
- for (i = len; i >; 0; i--){
- if (Result[i] >;= 10){
- Result[i-1] +=Result[i] / 10;
- Result[i] %= 10;
- }
- }
- for (i = 1; i <= zeros; i++)
- Result[len+i] = 0;
- }
- void Add(int *total, int tlen, const int *add, int alen){
- int i,tmp = tlen;
- while ((tlen >; 0) && (alen >; 0)){
- tlen--;
- alen--;
- total[tlen] += add[alen];
- }
- for (i = tmp - 1; i>;=0; i--){
- if (total[i] >;= 10){
- total[i - 1] += total[i] / 10;
- total[i] %= 10;
- }
- }
- }
复制代码 |
|