always_love_life 2021-04-10 15:09 采纳率: 20%
浏览 17

求大神看看两段代码的区别

题目描述

给出两个 200 位以内的正整数,求其和。

输入描述

多组测试数据。每组测试数据包括两行,每行一个数。

输出描述

每组测试输出一行,为所求两个整数之和。

样例输入

123

456

样例输出

579

 

 

 

 

我的代码

#include<stdio.h>
#include<string.h>
int main()
{
	char str1[201],str2[201];
	int l1,l2,num1[201],num2[201],i,j,a=0,b=0,n,m;
	while(~scanf("%s %s",str1,str2))
	{
		for(i=0,j=0;i<201,j<201;i++,j++)
		{
			num1[i]=0;
			num2[j]=0;
		}
		l1=strlen(str1);
		l2=strlen(str2);
		for(i=l1-1;i>=0;i--)
		{
			num1[a++]=str1[i]-'0';
		}
		for(j=l2-1;j>=0;j--)
		{
			num2[b++]=str2[j]-'0';
		}
		a=0,b=0;
		if(l1>=l2)
		{
			while(b<=l2-1)
			{
				num1[a++]+=num2[b++];
			}
			for(i=0;i<200;i++)
			{
				if(num1[i]>=10)
				{
					num1[i]-=10;
					num1[i+1]++;
				}
			}
			for(i=200;i>=0;i--)
			{
				if(num1[i]!=0)
				{
					n=i;
					break;
				}
			}
			for(i=n;i>=0;i--)
			{
				printf("%d",num1[i]);
			}
			printf("\n");
		}
		else if(l2>l1)
		{
			while(a<=l1-1)
			{
				num2[b++]+=num1[a++];
			}
			for(i=0;i<200;i++)
			{
				if(num2[i]>=10)
				{
					num2[i]-=10;
					num2[i+1]++;
				}
			}
			for(i=200;i>=0;i--)
			{
				if(num2[i]!=0)
				{
					n=i;
					break;
				}
			}
			for(i=n;i>=0;i--)
			{
				printf("%d",num2[i]);
			}
			printf("\n");
		}
	}
	return 0;
}

正确的代码

#include<stdio.h>
#include<string.h>
int main()
{
	char a[201],b[201];
	while(scanf("%s",a)!=EOF)
	{
		int A[201]={0},B[201]={0};
		scanf("%s",b);
		int i,n;
		for(i=0;i<strlen(a);i++)
		{
			A[i]=a[strlen(a)-i-1]-'0';
		}
		for(i=0;i<strlen(b);i++)
		{
			n=b[strlen(b)-i-1]-'0';
			B[i]=n;
		}
		if(strlen(a)<strlen(b))
		{
			for(i=0;i<strlen(a);i++)
			{
				B[i]=B[i]+A[i];
			}
			for(i=0;i<strlen(b);i++)
			{
				if(B[i]>9)
				{
					B[i]=B[i]-10;
					B[i+1]=B[i+1]+1;
				}
			}
			for(i=200;i>=0;i--)
			{
				if(B[i]!=0)
				{
					n=i;
					break;
				}
				n=0;
			}
			for(i=n;i>=0;i--) printf("%d",B[i]);
			printf("\n");

		}
		else
		{
			for(i=0;i<strlen(b);i++)
			{
				A[i]+=B[i];
			}
			for(i=0;i<strlen(a);i++)
			{
				if(A[i]>9)
				{
					A[i]-=10;
					A[i+1]+=1;
				}
			}
			for(i=200;i>=0;i--)
			{
				if(A[i]!=0)
				{
					n=i;
					break;
				}
				n=0;
			}
			for(i=n;i>=0;i--) printf("%d",A[i]);
			printf("\n");
		}
		strcpy(a,"");
		strcpy(b,"");
	}
}
  • 写回答

1条回答 默认 最新

  • always_love_life 2021-04-10 15:10
    关注

    我的代码一旦长了就会不对,短的还正确

     

    评论

报告相同问题?

悬赏问题

  • ¥20 公众号如何实现点击超链接后自动发送文字
  • ¥15 用php隐藏类名和增加类名
  • ¥15 算法设计与分析课程的提问
  • ¥20 汇川小型plc控制小米微电机
  • ¥15 用MATLAB汇总拟合图
  • ¥15 智能除草机器人方案设计
  • ¥15 对接wps协作接口实现消息发送
  • ¥15 SQLite 出现“Database is locked” 如何解决?
  • ¥15 已经加了学校的隶属邮箱了,为什么还是进不去github education?😭
  • ¥15 求会做聚类,TCN的朋友有偿线上指导。以下是目前遇到的问题