1 #include <cstdlib> 2 #include <iostream> 3 #include <algorithm> 4 5 using namespace std; 6 const int MAXLEN=100; 7 8 int*Str2Int(char*str) 9 { 10 int i,len=strlen(str); 11 int*a=new int[(len+1)*sizeof(int)]; 12 for(i=0;i<len;i++) a[i]=(int)str[len-i-1]-48; 13 return a; 14 } 15 16 int check(int* a,int n)//规整 17 { 18 int k=0,len=n; 19 while(a[len-1]==0&&len>1) len--; 20 for(k=0;k<len;k++) 21 { 22 if(a[k]>=10) 23 { 24 a[k+1]=a[k+1]+a[k]/10; 25 a[k]=a[k]%10; 26 } 27 28 } 29 if(a[k]!=0) len=k+1; 30 return len; 31 32 } 33 34 char* Int2Str(int* a,int n) 35 { 36 int i; 37 char* str=new char[(n+1)*sizeof(char)]; 38 for(i=0;i<n;i++) str[i]=(char)a[n-i-1]+48; 39 str[n]='\0'; 40 return str; 41 42 } 43 44 45 46 //加法:输入两个用字符数组表示的长整数m1,m2 47 //返回一个字符数组指针,指向m1+m2的和 48 char* addition(char* m1,char*m2) 49 { 50 int i,len1,len2,len,c=0; 51 int*t1,*t2; 52 len1=strlen(m1);len2=strlen(m2); 53 len=max(len1,len2); 54 t1=new int[(len+2)*sizeof(int)]; 55 t2=new int[(len+2)*sizeof(int)]; 56 t1=Str2Int(m1); 57 t2=Str2Int(m2); 58 for(i=len1;i<len+1;i++) t1[i]=0; 59 for(i=len2;i<len+1;i++) t2[i]=0; 60 for(i=0;i<len;i++) t1[i]=t1[i]+t2[i]; 61 len=check(t1,len); 62 return Int2Str(t1,len); 63 } 64 65 66 67 int main(int argc, char *argv[]) 68 { char s1[MAXLEN],s2[MAXLEN]; 69 while(cin>>s1>>s2) 70 cout<<addition(s1,s2)<<endl; 71 72 system("PAUSE"); 73 return EXIT_SUCCESS; 74 }
转载于:https://www.cnblogs.com/jieforever/p/4708449.html