大数加法(模拟加法)

本文介绍了大数加法的模拟方法,通过字符串存储大数并逐位相加。提供了相应的C语言代码实现,并探讨了其他可能的方法。
摘要由CSDN通过智能技术生成

大数加法

模拟加法

模拟加法是字符串储存大数,并逐个按照位数相加。

代码
#include<stdio.h>
#include<string.h>
int main()
{   char a1[100],a2[100];
	while(scanf("%s%s",&a1,&a2)!=EOF)
	{
		int b1[100]={0},b2[100]={0},b3[100]={0};
	    int a,b,c,d,e,i,j;
		a=strlen(a1);b=strlen(a2);
		for(i=a-1,j=0;i>=0;--i)
		{
			b1[j]=a1[i]-'0';
			j++;
		}
		for(i=b-1,j=0;i>=0;--i)
		{
			b2[j]=a2[i]-'0';
			j++;
		}
		if(a>b) { c=a;d=b;}
		else { c=b;d=a;}
		for(i=0;i<c;++i)
		{
			if(i<b) {
				e=b2[i]+b1[i];
				b3[i]+=e%10;
				b1[i+1]+=e/10;
			}
			else{
				if(a>b) b3[i]+=b1[i];
				else b3[i]+=b2[i];
			}
		}
		if(a==b&&b1[a-1]+b2[a-1]>9) printf("%d %d 1",b1[a-1],b2[a-1]); 
		for(i=c-1;i>=0;--i)
		{
			printf("%d",b3[i]);
			}
		printf("\n");		
	}
 }

方法二:

方法一明显有很多的限制,所以我找了一个老学姐的代码。思路清晰。

#include<stdio.h>
#include<string.h>
void rev(char str[],int len)
{
	char t;
	for(int i=0; i<len/2;++i){
		t=str[i];
		str[i]=str[len-i-1];
		str[len-i-1]=t;
	}  //该函数的意思是将一个字符串的顺序颠倒。 
}
int main()
{
    char a[1000],b[1000],c[1000];
	int ai,bi,val,carry;
	int len,len1,len2;
	scanf("%s %s",&a,&b);
	len1=strlen(a);
	len2=strlen(b);
	len=len1>len2 ? len1 : len2;//当判断语句成立时,将len1赋值给len,不成立时将len2赋值给len 
	rev(a,len1);
	rev(b,len2);
	carry=0;
	for(int i=0;i<len;++i){
		ai=i<len1 ? a[i]-'0' : 0;
		bi=i<len2 ? b[i]-'0' : 0;
		val=(ai+bi+carry)%10;
		carry=(ai+bi+carry)/10;
		c[i]=val+'0';
	}
	if(carry==1) putchar('1');
	for(int i=len-1;i>=0;--i){
		putchar(c[i]);
	}
	puts("");
	return 0;
}
方法三

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值