大整数加法

#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
	char s[400];
	char t[400];
	int m,n,max,d;
	int a[400],b[400],c[400];
	scanf("%s", s);
	scanf("%s", t);
	m = strlen(s);//计算长度
	n = strlen(t);
	if(m>=n)   //判断两个数的长度,比如2222和33,则33前要填两个0,并且要有考虑前导0,02222,00033,为什么要有前导0,因为进制转换要多一位
	{for(int i=0;i<m;i++)
	{
			a[0]=0;
		a[i+1] = s[i]-'0';}   //把字符转为数字
	for(int i=0;i<n;i++)
		{
		for(int i=0;i<=m-n;i++)
			b[i]=0;
		b[m-n+i+1] = t[i]-'0';}}
	if(m<n)
	{for(int i=0;i<n;i++)
	{
			b[0]=0;
		b[i+1] = t[i]-'0';}
	for(int i=0;i<m;i++)
		{
		for(int i=0;i<=n-m;i++)
			a[i]=0;
		a[n-m+i+1] = s[i]-'0';}}
	//
	if(m>n)
		for(int i=0;i<m+1;i++)
			c[i] = a[i] + b[i];
	if(m<=n)
		for(int i=0;i<n+1;i++)
			c[i] = a[i] + b[i];
	if (m > n)
         max = m;
     else
         max = n;
    if(m==n)
    	 max=n;
    for(int i=0;i<max+1;i++)
	for(int i=max;i>0;i--)
	//考虑进制,所以从后到前加,要考虑加法,所以每两个数相加后,如果大于9,则在下次十位加一,十位类似
	{
	if(c[i]>9)
		{
			c[i-1]+=1;
			c[i]%=10;

		}}
	d=max;
	for(int i=0;i<max+1;i++)
	{	if(c[i]!=0)  
		{d=i;
		break;}}
//		if(c[i]==)
	for(;d<max+1;d++)
		printf("%d", c[d]);
	
//	printf("\n");
	return 0;
			
	
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值