C语言也有大学问——大数相加问题

两个大数相加,超过了数据类型能表示的范围时,怎么办?

首先想到的是字符串,因为字符串只要内存够,就可以存放,这个时候我们就要借助字符串的一些操作来实现大数相加的问题。

具体代码如下:

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

void main()
{
	char s1[200], s2[200];
	int num1[200] = { 0 }, num2[200] = { 0 }, len1, len2, i, j,lenMax=0;      //数组清零   
	gets(s1);  gets(s2);           //输入两个大数装入字符数组  
	len1 = strlen(s1);  len2 = strlen(s2); //获得大数的长度   
	lenMax = len1 > len2 ? len1 : len2;
	for (i = len1 - 1, j = 0; i >= 0; i--)
		num1[j++] = s1[i] - '0';
	for (i = len2 - 1, j = 0; i >= 0; i--)
		num2[j++] = s2[i] - '0';   //将字符数组的值转为整形数值并装入数组   
	for (i = 0; i < lenMax; i++)
	{
		num1[i] += num2[i];

		if (num1[i] > 9)
		{
			num1[i] = num1[i] - 10;
			num1[i + 1]++;
		}
	}   //两个数组按位相加   
	for (i = lenMax; (i >= 0) && (num1[i] == 0); i--);           //从高位找出第一个不是零的数   
	if (i >= 0)
		for (; i >= 0; i--)
			printf("%d", num1[i]);             //输出数组    
	else     printf("0\n");
}

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值