大数加法
大数加法的核心在超出了基本运算的范围,需要用大数的方法解决问题。
思路:输入——倒叙相加——判断是否进位——输出解决前导零问题。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main(){
char s1[105],s2[105],res[110];
gets(s1);
gets(s2);
int len1=strlen(s1);
int len2=strlen(s2);
int maxlen=max(len1,len2)+1;
int flag=0,i=len1-1,j=len2-1,k=maxlen-1;
for(;i>=0&&j>=0;i--,j--){
int tmp=(s1[i]-'0')+(s2[j]-'0')+flag;
flag=tmp/10;
res[k--]=tmp%10+'0';
}
while(i>=0){
int tmp=(s1[i--]-'0')+flag;
flag=tmp/10;
res[k--]=tmp%10+'0';
}
while(j>=0){
int tmp=(s2[j--]-'0')+flag;
flag=tmp/10;
res[k--]=tmp%10+'0';
}
res[k--]=flag+'0';
if(flag) puts(res);
else{
for(int i=1;i<strlen(res);i++){
printf("%c",res[i]);
}
}
return 0;
}
我们首先将大数存储在c语言的字符串数组中,然后对每一位进行按位加法,并且记录每一次加是否具有进位(即加后结果是否大于十)直至下一位的加法时,若此位结果大于十,则取个位保存,进位置于进位标志符,在下一位加法时,进行进位,以此类推,直至某一方位数被加完。

浙公网安备 33010602011771号