大数相加demo记录贴

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

char ar_to_in (char a)
{
	return (int)(a - 48);
}

int in_to_ar (int a)
{
	return (char)(a + '0');
}


int main()
{
	int a_length;
	int b_length;
	int max_length;
	int min_length;
	
	char a[1000];
	char b[1000];
	printf("please input you want \n");
	scanf("%s",a);
	printf("please input you want continue \n");
	scanf("%s",b);
	
	a_length = strlen(a);
	b_length = strlen(b);
	
	int add_flag = 0;
	
	max_length = (a_length>b_length)?a_length:b_length;
	min_length = (a_length<b_length)?a_length:b_length;
	
	if(a_length < max_length)
	{
		add_flag = 1;
	}
	if(b_length < max_length)
	{
		add_flag = 2;
	}
	
	char c[max_length];
	
	int add_zero_flag = max_length - 1;

	//对非0区域补0
	for(int i=0;i<max_length;i++)
	{
		if(add_flag == 1)
		{
			if(min_length <= 0)
			{
				c[add_zero_flag] = '0';
				printf("case 1: add_zero_flag = %d, %d \n",add_zero_flag,c[add_zero_flag]);
			}
			if(min_length > 0)
			{
			    c[add_zero_flag] = a[min_length-1];
			}	
		}
		if(add_flag == 2)
		{
			if(min_length <= 0)
			{
				c[add_zero_flag] = '0';
			}
			if(min_length > 0)
			{
			    c[add_zero_flag] = b[min_length-1];
			}
		}
		add_zero_flag--;
		min_length--;
	}
	
	
	
	char sum[max_length + 1]; //init add sum
	for(int i=0;i<=max_length;i++)
	{
	    sum[i] = '0';
	}

	int sum_flag = max_length; 
	int ten_flag = 0; 
		
	for(int i=0;i<max_length;i++)
	{
		if(add_flag ==1)
		{		
			ten_flag = ar_to_in(c[sum_flag-1])+ar_to_in(b[sum_flag-1])+ar_to_in(sum[sum_flag]);
		    if(10 <= ten_flag)
		    {
			     sum[sum_flag-1] = in_to_ar(ten_flag/10);				 
		    }
			sum[sum_flag] = in_to_ar(ten_flag%10);
		}
		else if(add_flag == 2)
		{	
			ten_flag = ar_to_in(c[sum_flag-1])+ar_to_in(a[sum_flag-1])+ar_to_in(sum[sum_flag]);
		    if(10 <= ten_flag)
		    {
			     sum[sum_flag-1] = in_to_ar(ten_flag/10);				 
		    }
			sum[sum_flag] = in_to_ar(ten_flag%10);
		}
		else if(add_flag ==0)
		{
			ten_flag = ar_to_in(b[sum_flag-1])+ar_to_in(a[sum_flag-1])+ar_to_in(sum[sum_flag]);
		    if(10 <= ten_flag)
		    {
			     sum[sum_flag-1] = in_to_ar(ten_flag/10);				 
		    }
			sum[sum_flag] = in_to_ar(ten_flag%10);
		}
		sum_flag --;
		
	}
	
	for(int i=0;i<= max_length;i++)
	{
		if(sum[i] == '0')
		{
			continue;
		}
		else
		printf("%c",sum[i]);
	}
	printf("\n");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值