杭电 1002

来源:互联网 发布:沙滩鞋淘宝 编辑:程序博客网 时间:2024/06/06 13:23

非常简单的题目,大数相加,而且不用考虑是负数的情况,这就更简单了。


处理思路: 利用字符串来进行处理。


唯一需要注意的是最后的格式控制,着实坑爹。


AC代码:

#include<stdio.h>#include<string.h> #define MAX 1001int 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");      }        }}


0 0
原创粉丝点击