这题就是一个大数的加法题,不过要注意的是,中间需要清空的数组,一定要清空,不然会出错,我由于有数组没清空,导致WA了一次
code 1#include <stdio.h> 2#include <string.h> 3#include <stdlib.h> 4#include <math.h> 5 6int add_a[2006],add_b[2006],add_c[2006]; 7int tmp[2006]; 8int len_a,len_b,len_c,len_tmp; 9int tran(int num[],int n)//把一个数转换成一个数组 10{ 11 int ret = 0; 12 memset(num,0,sizeof(num)); 13 while(n) 14 { 15 num[ret] = n%10; 16 n /= 10; 17 ret++; 18 } 19 return ret;//返回长度 20} 21void big_add()//大数加法 且完成数组的变换 及加完之后 22{ //把b赋给a c赋给b 结果赋给c 23 int i; 24 int big_index; 25 memset(tmp,0,sizeof(tmp)); 26 big_index = len_a>len_b?len_a:len_b;//得到两个数组中长度大的 27 for(i = 0;i < big_index;i++) 28 { 29 tmp[i] += add_a[i]+add_b[i]; 30 tmp[i+1] += tmp[i]/10; 31 tmp[i] = tmp[i]%10; 32 } 33 if(tmp[big_index])//计算结果的长度 34 len_tmp = big_index+1; 35 else 36 len_tmp = big_index; 37 big_index = len_c>len_tmp?len_c:len_tmp; 38 for(i = 0;i < big_index;i++) 39 { 40 tmp[i] += add_c[i]; 41 tmp[i+1] += tmp[i]/10; 42 tmp[i] = tmp[i]%10; 43 } 44 if(tmp[big_index]) 45 len_tmp = big_index+1; 46 else 47 len_tmp = big_index; 48 49 memset(add_a,0,sizeof(add_a));//这里要清空 50 for(i = 0;i < len_b;i++) //b--->a 51 add_a[i] = add_b[i]; 52 len_a = len_b; 53 memset(add_b,0,sizeof(add_b)); 54 for(i = 0;i < len_c;i++) 55 add_b[i] = add_c[i]; 56 len_b = len_c; 57 memset(add_c,0,sizeof(add_c)); 58 for(i = 0;i < len_tmp;i++) 59 add_c[i] = tmp[i]; 60 len_c = len_tmp; 61 return ; 62} 63void pro(int a,int b,int c) 64{//计算a99 65 int i,j; 66 67 memset(add_a,0,sizeof(add_a)); 68 memset(add_b,0,sizeof(add_b)); 69 memset(add_c,0,sizeof(add_c)); 70 len_a = tran(add_a,a); 71 len_b = tran(add_b,b); 72 len_c = tran(add_c,c); 73 for(i = 3;i < 100;i++) 74 { 75 big_add(); 76 } 77 78} 79 80void print() 81{//print the ans 82 int i; 83 for(i = len_c-1;i >= 0;i--) 84 printf("%d",add_c[i]); 85 printf("\n"); 86 return ; 87} 88int main(void) 89{ 90 int a,b,c; 91 while(EOF != scanf("%d%d%d",&a,&b,&c)) 92 { 93 pro(a,b,c); 94 print(); 95 } 96 return 0; 97} 98
|