目录
相信大家一定会为C++的高精度而苦恼,下面我们来看一下C++的高精度加法。
不要跟我提P某。
例题:
还是洛谷的
网址:
废话少说,上代码!
AC代码:
#include<bits/stdc++.h>
using namespace std;
int a[510],b[510],c[511];
string s1,s2;
int main(){
cin>>s1>>s2;
int len1=s1.size();
int len2=s2.size();
for(int i=0;i<len1;i++){
a[i]=s1[len1-i-1]-'0';
}
for(int i=0;i<len2;i++){
b[i]=s2[len2-i-1]-'0';
}
int len=max(len1,len2)+1;
int jw=0;
for(int i=0;i<len;i++){
c[i]=a[i]+b[i]+jw;
jw=c[i]/10;
c[i]%=10;
}
for(int i=len-1;i>=0;i--){
if(c[i]==0&&len>1){
len--;
}else{
break;
}
}
for(int i=len-1;i>=0;i--){
cout<<c[i];
}
return 0;
}
分析:
1.输入字符串
cin>>s1>>s2;
2.倒序存入int类型数组
int len1=s1.size();
int len2=s2.size();
for(int i=0;i<len1;i++){
a[i]=s1[len1-i-1]-'0';
}
for(int i=0;i<len2;i++){
b[i]=s2[len2-i-1]-'0';
}
3.模拟竖式
int len=max(len1,len2)+1;
int jw=0;
for(int i=0;i<len;i++){
c[i]=a[i]+b[i]+jw;
jw=c[i]/10;
c[i]%=10;
}
4.去除前导零
for(int i=len-1;i>=0;i--){
if(c[i]==0&&len>1){
len--;
}else{
break;
}
}
5.输出
for(int i=len-1;i>=0;i--){
cout<<c[i];
}
今天就到这了,感谢大家的支持!