C语言大数运算——加法

这个老到掉牙的大数运算问题,本人一个初学者,在这里发了给自己看吧—,如果可以帮助别人,我也是很开心的哈,不过我这表诉能力,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
#include
#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;ilen_2)
	{
		for(;i0;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

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

你可能感兴趣的:(C语言大数运算——加法)