P1601 A+B Problem(高精)
题目描述
高精度加法,x相当于a+b problem,[b][color=red]不用考虑负数[/color][/b]
输入输出格式
输入格式:
分两行输入a,b<=10^500
输出格式:
输出只有一行,代表A+B的值
输入输出样例
输出样例#1:
P1601
2
几百年没写过高精了,今天突发奇想打算练练手。结果发现了许多问题。
比如说strrev不能用,反转需要用其它方法;
0+0要特判(可能在某些做法中不用)...主要是我用的s[i]-'0',如果s[i]本身就是0的话,减完就没有东西了。
1 #include <iostream> 2 #include <cmath> 3 #include <cstring> 4 #include <cstdio> 5 #include <cstdlib> 6 #include <algorithm> 7 using namespace std; 8 char s1[505],s2[505]; 9 int ans[600]; 10 int main() 11 { 12 cin>>s1>>s2; 13 int len1=strlen(s1),len2=strlen(s2); 14 char tmp; 15 if(s1[0]=='0' && s2[0]=='0') {printf("0");return 0;} 16 for(int i=0;i<len1/2;i++) 17 { 18 tmp=s1[i]; 19 s1[i]=s1[len1-i-1]; 20 s1[len1-i-1]=tmp; 21 } 22 for(int i=0;i<len2/2;i++) 23 { 24 tmp=s2[i]; 25 s2[i]=s2[len2-i-1]; 26 s2[len2-i-1]=tmp; 27 } 28 int jw=0,sum=0,cnt=max(len1,len2); 29 for(int i=0;i<min(len1,len2);i++) 30 { 31 sum=s1[i]-'0'+s2[i]-'0'; 32 ans[i]=(sum+jw)%10; 33 jw=(sum+jw)/10; 34 } 35 36 if(len1>len2) 37 { 38 for(int i=len2;i<len1;i++) 39 { 40 sum=s1[i]-'0'+jw; 41 ans[i]=sum%10; 42 jw=sum/10; 43 } 44 if(jw!=0) ans[len1]=jw; 45 } 46 else 47 { 48 for(int i=len1;i<len2;i++) 49 { 50 sum=s2[i]-'0'+jw; 51 ans[i]=sum%10; 52 jw=sum/10; 53 } 54 if(jw!=0) ans[len2]=jw; 55 } 56 while(ans[cnt]==0) cnt--; 57 for(int i=cnt;i>=0;i--) printf("%d",ans[i]); 58 return 0; 59 }