非常简单的题目,大数相加,而且不用考虑是负数的情况,这就更简单了。
处理思路: 利用字符串来进行处理。
唯一需要注意的是最后的格式控制,着实坑爹。
AC代码:
#include<stdio.h>
#include<string.h>
#define MAX 1001
int main()
{
char num1[MAX];
char num2[MAX];
char result[MAX+1];
int loop;
scanf("%d",&loop);
for(int k=0;k<loop;k++)
{
scanf("%s",num1);
scanf("%s",num2);
int lengthNum1=strlen(num1);
int lengthNum2=strlen(num2);
int isChange = false;
// 交换位置,保证num2是字数最长的
if( lengthNum1 > lengthNum2 )
{
char numTemp[MAX];
strcpy(numTemp,num1);
strcpy(num1,num2);
strcpy(num2,numTemp);
isChange = true;
}
int j=strlen(num1)-1;
int add=0;
// 处理位数相同的
for( int i=strlen(num2)-1; (i>=0 && j>=0) ;i-- )
{
char tmp = num2[i] + ( num1[j] - '0' ) + add;
if( tmp > '9')
{
add = 1;
tmp = tmp - 10;
}
else
{
add = 0;
}
result[i] = tmp;
j--;
}
// 处理位数多余的
for(int i= strlen(num2) -strlen(num1) -1; i >= 0;i--)
{
char tmp = num2[i] + add;
if( tmp > '9')
{
add = 1;
tmp = tmp - 10;
}
else
{
add = 0;
}
result[i] = tmp;
}
//记得字符串最后一位置结束符
result[strlen(num2)]='\0';
printf("Case %d:\n",k+1);
//根据是否交换来过数字决定输出顺序
if( true == isChange )
{
printf("%s + %s = ",num2, num1);
}
else
{
printf("%s + %s = ",num1,num2);
}
//控制最后一个进位
if(add != 0)
{
printf("1");
}
//控制最后一次输出是否换行
printf("%s\n",result);
if( k != loop-1)
{
printf("\n");
}
}
}