https://www.luogu.org/problemnew/show/P1601(题目传送)
显然数据范围超过了long long类型,故不能简单的用两个长整型存起来相加。这里用到大数据的高精度算法(加法)。
所谓高精度算法,就是先用字符串将输入存下,并把字符串倒序(方便之后处理)转换成数组,并依据小学竖式的算法思想,逐位处理计算结果(而这里高精度加法的核心就是进位)。
上代码:
1 #include2 #include 3 #include 4 using namespace std; 5 int a[502],b[502],c[502]; 6 int main() 7 { 8 char s1[501],s2[501]; 9 cin>>s1>>s2;10 for(int i=strlen(s1)-1;i>=0;i--)11 a[strlen(s1)-i]=s1[i]-'0';12 for(int i=strlen(s2)-1;i>=0;i--)13 b[strlen(s2)-i]=s2[i]-'0';14 int i=1;15 while(i<=strlen(s1)||i<=strlen(s2))16 {17 c[i]+=a[i]+b[i];18 if(c[i]>=10)19 {20 c[i+1]++;21 c[i]%=10;22 }23 i++;24 }25 while(!c[i]&&i>1) i--;26 for(;i>=1;i--)27 cout<
最后几点提醒:
1.储存结果的数组c中开头的0不输出;若c中全是零,即两数之和为0,就只保留最后一位0输出。
2.若输入的数据中有负数,就要进行特判,并视情况转化为相应的高精度减法计算。
3.输出判断时应从两个加数最高位+1开始(防止加数最高位有进位但被忽略)。