P1601 A+B Problem(高精)

题目描述

高精度加法,x相当于a+b problem,[b][color=red]不用考虑负数[/color][/b]

输入输出格式

输入格式:

分两行输入a,b<=10^500

输出格式:

输出只有一行,代表A+B的值

输入输出样例

输入样例#1: 
1
1
输出样例#1: 
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 }
P1601

猜你喜欢

转载自www.cnblogs.com/YXY-1211/p/9092965.html