高精度加法:
我把他分为了
1.字符输入数
2.转换字符为数组
3.数组加法计算
4.输出
GET!
#include<bits/stdc++.h>
using namespace std;
string s1,s2;
int a[105],b[105],c[105],lena,lenb;
先写头文件和需要的变量,头文件用的是万能头文件,所以不需要加其他的。输入因为我们输入是字符串,所以我们定义了string s1、s2 ,对应的是加法的加数。数组a,b也是加数,c是和,也就是所求的答案,lena、lenb用来储存s1、s2的长度。
int main(){
//转换
cin>>s1>>s2;
lena=s1.size();
lenb=s2.size();
for(int i=0;i<lena;i++)a[lena-i]=s1[i]-'0';
for(int i=0;i<lenb;i++)b[lenb-i]=s2[i]-'0';
这就是字符串转换成数组的代码,lena、lenb用来储存长度便于后续循环转换,for,从0开始,到长度,然后后面需要倒叙输入,为什么呢,按照加法的计算规则,数是由低位加到高位的。
//数组加法
int x=0;
int lenc=max(lena,lenb);
int k=0;//进位
for(int i=1;i<=lenc;i++){
c[i]=a[i]+b[i]+k;
k=c[i]/10;
c[i]=c[i]%10;
}
if(k)c[++lenc]=k;
先求出和的长度,在加数见取最大的,max(),定义变量k用来进位,然后进行数组加法计算,逐位从低高到相互相加,超出10的取余进位。还需考虑一个情况,如果加法最高位进位需新增一个位数,所以我们在循环过后一个if判断,专门为lenc考虑最高位的进位的
//输出
for(int i=lenc;i>=1;i--)cout<<c[i] ;
return 0;
}
最后输出。
源代码:
#include<bits/stdc++.h>
using namespace std;
string s1,s2;
int a[105],b[105],c[105],lena,lenb;
int main(){
//转换
cin>>s1>>s2;
lena=s1.size();
lenb=s2.size();
for(int i=0;i<lena;i++)a[lena-i]=s1[i]-'0';
for(int i=0;i<lenb;i++)b[lenb-i]=s2[i]-'0';
//数组加法
int x=0;
int lenc=max(lena,lenb);
int k=0;//进位
for(int i=1;i<=lenc;i++){
c[i]=a[i]+b[i]+k;
k=c[i]/10;
c[i]=c[i]%10;
}
if(k)c[++lenc]=k;
//输出
for(int i=lenc;i>=1;i--)cout<<c[i] ;
return 0;
}
【如有更佳想法或建议,欢迎讨论!】
【原创作品,未经许可,谢绝转载(虽然讲得也挺拉)】