大数加法

大数加法的核心在超出了基本运算的范围,需要用大数的方法解决问题。

思路:输入——倒叙相加——判断是否进位——输出解决前导零问题。

#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语言的字符串数组中,然后对每一位进行按位加法,并且记录每一次加是否具有进位(即加后结果是否大于十)直至下一位的加法时,若此位结果大于十,则取个位保存,进位置于进位标志符,在下一位加法时,进行进位,以此类推,直至某一方位数被加完。

posted @ 2021-01-16 23:00  鬼姬不会跳仇舞  阅读(101)  评论(0)    收藏  举报