高精度加法
高精度加法:https://www.luogu.com.cn/problem/P1601
题目描述
高精度加法,相当于a+b problem,不 用考虑负数.
输入格式
分两行输入。a,b<=10^{500}a,b<=10500
输出格式
输出只有一行,代表a+ba+b的值
输入输出样例
输入 #
1
1
输出 #
2
首先,是输入:
1 cin>>s; 2 a[0]=s.size(); 3 for(int i=0; i<a[0]; i++) { 4 a[a[0]-i]=s[i]-'0'; 5 } 6 cin>>s; 7 b[0]=s.size(); 8 for(int i=0; i<b[0]; i++) { 9 b[b[0]-i]=s[i]-'0'; 10 }
因为是高精度,所以什么int,long long的都不行,只能用字符串,再转换成数字。
然后再一位一位地加。
1 memset(c,0,sizeof(c)); 2 int len=a[0]>b[0]?a[0]:b[0]; 3 int g=0; 4 for(int i=1; i<=len; i++) { 5 c[i]=a[i]+b[i]+g; 6 g=c[i]/10; 7 c[i]%=10; 8 } 9 if(g) c[++len]=g; 10 c[0]=len;
最后,再一位一位的输出就行,(记得逆着输出)
for(int i=c[0]; i>=1; i--) { cout<<c[i]; } cout<<endl;
以下是完整代码
#include<bits/stdc++.h> using namespace std; int a[505],b[505],c[510]; string s; int main() { cin>>s; a[0]=s.size(); for(int i=0; i<a[0]; i++) { a[a[0]-i]=s[i]-'0'; } cin>>s; b[0]=s.size(); for(int i=0; i<b[0]; i++) { b[b[0]-i]=s[i]-'0'; } memset(c,0,sizeof(c)); int len=a[0]>b[0]?a[0]:b[0]; int g=0; for(int i=1; i<=len; i++) { c[i]=a[i]+b[i]+g; g=c[i]/10; c[i]%=10; } if(g) c[++len]=g; c[0]=len; for(int i=c[0]; i>=1; i--) { cout<<c[i]; } cout<<endl; return 0; }
最后,老婆美图奉上:
庆祝雪乃党大获全胜