1.加法
分别用char和string来实现
1 #include <bits/stdc++.h> 2 using namespace std; 3 #define MAX 100000 4 int an1[MAX+5]; 5 int an2[MAX+5]; 6 char line1[MAX+5]; 7 char line2[MAX+5]; 8 int main() 9 { 10 cin>>line1>>line2; 11 int i,j; 12 int len1=strlen(line1); 13 for(j=0,i=len1-1;i>=0;i--) 14 an1[j++]=line1[i]-'0'; 15 int len2=strlen(line2); 16 for(j=0,i=len2-1;i>=0;i--) 17 an2[j++]=line2[i]-'0'; 18 for(i=0;i<MAX;i++) 19 { 20 an1[i]+=an2[i]; 21 if(an1[i]>=10) 22 { 23 an1[i]-=10; 24 an1[i+1]++; 25 } 26 } 27 for(i=MAX;(i>=0)&&(an1[i]==0);i--); 28 if(i>=0) 29 for(;i>=0;i--) 30 cout<<an1[i]; 31 else 32 cout<<0; 33 return 0; 34 }
1 #include <bits/stdc++.h> 2 using namespace std; 3 #define MAX 1000 4 string add(string num1,string num2) 5 { 6 string num(1000,'0'); 7 reverse(num1.begin(),num1.end()); 8 reverse(num2.begin(),num2.end()); 9 int i,len; 10 int temp=0; 11 for(i=0;i<num1.length();i++) 12 num[i]=num1[i]; 13 for(i=0;i<num2.length();i++) 14 { 15 temp+=num[i]-'0'+num2[i]-'0'; 16 num[i]=temp%10+'0'; 17 temp/=10; 18 } 19 reverse(num.begin(),num.end()); 20 if(num.find_first_not_of('0')==string::npos) 21 num='0'; 22 else 23 num.erase(num.begin(),num.begin()+num.find_first_not_of('0')); 24 return num; 25 } 26 int main() 27 { 28 int n; 29 cin>>n; 30 for(int i=0;i<n;i++) 31 { 32 string a,b; 33 cin>>a>>b; 34 cout<<"Case "<<i+1<<":"<<endl<<a<<" + "<<b<<" = "<<add(a,b)<<endl; 35 } 36 return 0; 37 }