每日一练

目录

1151:题目描述

比利经常会碰到超大整数的加法运算,而普通的计算器上无法进行。因此他想你帮他写一个程序来计算结果。

答案:


1151:题目描述

比利经常会碰到超大整数的加法运算,而普通的计算器上无法进行。因此他想你帮他写一个程序来计算结果。

输入

输入数据有多组。首先输入一个整数T,表示有T组输入。

每组输入两个大整数,并用空格隔开。每个整数最多1000位。没有负数输入。

输出

对于每组输入,输出两个整数的和,单独占一行。

答案:

#include<stdio.h>
int main()
{
	char a[1002],b[1002];
	int i,n,j,k,t;
	scanf("%d",&n);
	for(i=0; i<n; i++)
	{
		scanf("%s%s",&a,&b);
		for(j=0; a[j]!='\0'; j++)//数组a和b 为1-9的数字
			a[j]=a[j]-48;
		for(k=0; b[k]!='\0'; k++)
			b[k]=b[k]-48;
		if(j>k)
		{
			t=j;
			for(k; k>0; k--,j--)
			{
				a[j-1]=a[j-1]+b[k-1];
				if(a[j-1]>9)
				{
					a[j-1]=a[j-1]%10;
					a[j-2]=a[j-2]+1;
				}
			}
			//for(j=0; a[j]!='\0'; j++)
			for(j=0; j<t; j++)
				printf("%d",a[j]);
			printf("\n");
		}
		else
		{
			t=k;
			for(j; j>0; k--,j--)
			{
				b[k-1]=b[k-1]+a[j-1];
				if(b[k-1]>9 && k!=1)//9+9=18,即 b[0]不用进位,可以大于9 
				{
					b[k-1]=b[k-1]%10;
					b[k-2]=b[k-2]+1;
				}
			}
			//for(k=0; b[k]!='\0'; k++)
			for(k=0; k<t; k++)
				printf("%d",b[k]);
			printf("\n");
		}
	}
	return 0;
}

问题:

输出按照//的方式会少输出一个,原因未知(理论应该输出完整)

大数加法运算时,控制循环次数的i会失效,答案能算出,但是程序不会结束,程序会无限算读取的两个数的加法

还有一个思路:

#include<stdio.h>
int main()
{
	char a[1001],b[1001];
	int i,n,j,k,l;
	scanf("%d",&n);
	for(i=0; i<n; i++)
	{
		scanf("%s%s",&a,&b);
		for(j=0; a[j]!='\0'; j++)//数组a和b 为1-9的数字
			a[j]=a[j]-48;
		for(k=0; b[k]!='\0'; k++)
			b[k]=b[k]-48;
		

		if(j>k)
			while(!isdigit(b[k-1]+48))
				for(l=j-1; l>0; l--)//向后平移一位
					b[l]=b[l-1];
		for(k=0; b[k]!='\0'; k++)
			printf("%d",b[k]);
		printf("\n");
		if(j<k)
			while(!isdigit(a[j-1]+48))
			for(l=k-1; l>0; l--)//向后平移一位
				a[l]=a[l-1];

	}
	for(l=0; a[l]!='\0'; l++)
		printf("%c\n",a[l]);
	for(l=0; b[i]!='\0'; l++)
		printf("%c\n",b[l]);
	return 0;
}

例如

123 2

转化为

123 002

然后单独相加(从下标2(右向左)(进位问题)开始循环,上下数组相加,    如果  >9 ,剩下%10(数组【0】不用进位))

思路是这样,代码暂时未完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值