加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

C语言大数相加

发布时间:2020-12-14 02:47:56 所属栏目:大数据 来源:网络整理
导读:当要执行相加的两个数超出C语言所能表示的范围时,就不能用正常的加法运算来执行相加操作,这时候可以用两个字符数组接收要相加的两个大数, 然后从两个大数的地位进行按位相加,并设置一个进位标志,如果标志为1,表示有进位,否则没有进位。 要注意的是字

当要执行相加的两个数超出C语言所能表示的范围时,就不能用正常的加法运算来执行相加操作,这时候可以用两个字符数组接收要相加的两个大数,

然后从两个大数的地位进行按位相加,并设置一个进位标志,如果标志为1,表示有进位,否则没有进位。

要注意的是字符数组的地位为数字的高位,所以要从数组下标大的地方开始相加。

#include <stdio.h>
#include <string.h>

int main(){
	
	char a[100],b[100];   //a,b数组接收两个数,c为结果数组
	char c[101];
	int alen,blen;
	int carry = 0;
	int i,j,k;
	int temp;

	printf("enter a number: ");  	//输入数字,低下标是数的高位
	gets(a);
	printf("enter another number: ");
	gets(b);
	
	alen = strlen(a);
	blen = strlen(b);
	k = 0;

	//从数组高位开始相加,直到有一个数组已经加完
	for(i=alen-1,j=blen-1;i>=0 && j>=0;i--,j--){
		temp = a[i]-'0'+b[j]-'0'+carry; //将字符转换为数字相加,结果为数字
		if(temp>=10){
			temp -= 10;
			carry = 1;
		}else{
			carry = 0;
		}

		c[k] = temp+'0';       //将结果转换为字符存储
		k++;
	}
	
	//下面两个循环用于将未加完的数组加到结果数组中
	while(i>=0){
		temp = a[i]-'0'+carry;
		if(temp>=10){
			temp -= 10;
			carry = 1;
		}else{
			carry = 0;
		}
		
		c[k] = temp+'0';
		i--;
		k++;
	}
	
	while(j>=0){
		temp = b[j]-'0'+carry;
		if(temp>=10){
			temp -= 10;
			carry = 1;
		}else{
			carry = 0;
		}
		
		c[k] = temp+'0';
		j--;
		k++;
	}
	
	if(carry){      //如果最后还有进位,则将最高位置为1,k此时并不增加,k表示结果的最高位
		c[k] = 1+'0';
	}else{           //否则将k的值减一
		k--;
	}
	
	while(k>=0){   //从最高位开始输出
		printf("%c",c[k--]);
	}
	printf("n");
	
    return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读