C语言大数运算——加法

本文详细解析了大数加法的实现过程,包括使用字符数组存放大数、确定结果位数、逢十进一操作及ASCII码转换。通过具体代码示例,展示了如何处理两个大数相加的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个老到掉牙的大数运算问题,本人一个初学者,在这里发了给自己看吧—,如果可以帮助别人,我也是很开心的哈,不过我这表诉能力,emmm,废话不多说,上干货

123456
+
126
主要问题:
1.大数用什么存放?
2.两个大数相加,结果有几位数?
3.如何进行逢十进一的操作?
4.字符的0-9与数值的0-9之间转换的问题

/**************************************************************************************/ 
/*						大数运算篇——加法   										      */ 
/*  123456          分析:从最低位到最高位,一次相加 得到结果为  1 2 3 5 7 12  		      */ 
/*       +                遇到大于10的数字,则保留个位,并向前进一 12>10 7+1 =8 12变2      */ 
/*     126                写入新的结果 123582 需要注意的是,0的ASCⅡ码是48,这中间有       */ 
/* =123582          	  一个换算,即 字符6 - '0'在数值上才是6				              */
/**************************************************************************************/
/*具体问题:
	1.如何存放大数      用字符数组
	2.如何确定结果位数  相加时候,位数最大的位数+1 一个5位数加一个五位数,最多变成6位数
	3.如何进行逢十进一  利用循环,倒序相加
	4.注意:只有两个数都有的时候才相加,一个数不存在的时候,直接写入结果  
*/
//作者:fat pears 最近更新时间:2019.01.30 
/*代码实现*/		


#include<stdio.h>
#include<string.h>
#define N 10000


int main()
{
	char num_1[N]={0},num_2[N]={0},result[N]={0};
	long len_1,len_2,len;
	int i; 
	 
	printf("请输入第一个数\n");
	scanf("%s",num_1);
	getchar();
	printf("请输入第二个数\n"); 
	gets(num_2);
	
	//计算两个数的位数以及结果的最大位数 
	len_1 = strlen(num_1);
	len_2 = strlen(num_2);
	len   = len_1>len_2? len_1:len_2 ;    
	len++;
	
	//倒序相加直到小的数被加完为止 
	for(i = 0;i<len_1&&i<len_2;i++)
	{
		result[len-1-i] = num_1[len_1-1-i] - '0' + num_2[len_2-1-i] - '0';
	}
	
	//找出大的数直接赋值进result 
	if(len_1>len_2)
	{
		for(;i<len_1;i++)
		{
			result[len-1-i] = num_1[len_1-1-i] - '0';
		}
	}
	else
	{
		for(;i<len_2;i++)
		{
			result[len-1-i] = num_2[len_2-1-i] - '0';
		}
	 }
	 
	//倒序判断,逢十进一
	for(i = len - 1;i>0;i--)
	{
		if(result[i]>=10)
		{
			result[i] = result[i]%10;
			result[i-1]++;
		}
	 }
	 
	 //判断是后位数多出一位 9+8=17变成2位数,如果没有则全部前移。并变回数字的ASC2码 
	 if(result[0]!= 0)
	 {
	 	for(i = 0;i<len;i++)
	 	{
	 		result[i] += '0';
		 }
		 result[len] = '\0';
	  }
	 else
	 {
	 	for(i=1;i<len;i++)
	 	{
	 		result[i-1] = result[i] + '0';
		 }
		 result[len-1] = '\0';
      }
      
      printf("两个数相加的结果是:\n");
      puts(result);
      
	 return 0;
 } 

以上,没了=-=
总的来说,没啥想说的=-=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值