杭电ojACM1002题目

#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int main()
{
    int T;
    cin>>T;
        char A[1500];
        char B[1500];
        int num1[2000];
        int num2[2000];
        memset(num1,0,sizeof(num1));
        memset(num2,0,sizeof(num2));
        for(int i=0;i<T;i++)
        {
            scanf("%s",A);
            scanf("%s",B);
            int len1=strlen(A);
            int len2=strlen(B);
            int len=len1>len2?len1:len2;
            printf("Case ");
            printf("%d",i+1);
            printf(":\n");
            for(int j=len1-1,m=0;j>=0;j--)
            {
                num1[m]=A[j]-48;
                printf("%d",num1[m]);
                m++;
            }
            printf(" + ");
            for(int k=len2-1,n=0;k>=0;k--)
            {
                num2[n]=B[k]-48;
                printf("%d",num2[n]);
                n++;
            }
            printf(" = ");
            for(int x=0;x<len;x++){
                num1[x]+=num2[x];
                if(num1[x]>9){
                    num1[x+1]+=1;
                    num1[x]-=10;
                }
            }
            if(num1[len]>0)
            {
                for(int m=len;m>=0;m--)
                {
                    printf("%d",num1[m]);
                }
            }
            else{
                for(int n=len-1;n>=0;n--)
                {
                    printf("%d",num1[n]);
                }

            }
            printf("\n");
            if(i<=T-2)
            {
                printf("\n");
            }
        }
    return 0;
}

运行结果:
杭电ojACM1002题目

杭电ojACM1002题目

本人调试过都是正确的数据,思路就是先输入两串字符串,转化为整型串,然后分别相加再进位。

                                                                                                                                                                                                                                 

 

下面还有一种:(ps 本人调试过,每次都是在结尾处多一个0,希望大家能帮忙看看)

#include<string.h>
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
    int n,i,sum=0,length1,length2,length3,length,j,k=0,t=0,s,p=0,q=0,flag1,flag2,u=0,v=0;
    int c1[50],d1[50],e[50];
    char a[20],b[20];
    cin>>n;
    for(s=1;s<=n;s++)
    {
        scanf("%s",a);
        scanf("%s",b);
        cout<<"Case "<<s<<":"<<endl;
        for(i=0;a[i]>0;i++)
        {
            c1[i]=a[i]-'0';
            cout<<c1[i];
        }
        length1=strlen(a);
        length2=strlen(b);
        length=length1>length2?length1:length2;
        cout<<" + ";
        for(j=0;b[j]>0;j++)
        {
            d1[j]=b[j]-'0';
            cout<<d1[j];
        }
        cout<<" = ";
        for(u=0,v=0;u<length1&&v<length2;u++,v++)
        {
            sum=t+c1[length1-u-1]+d1[length2-v-1];
            if(sum>=10)
            {
                e[k]=sum-10;
                t=sum/10;
            }
            else
            {
                e[k]=sum;
                t=0;
            }
            k++;
            sum=0;
        }
        for(int z=0;z<k;z++)
          cout<<e[k-z-1];
          cout<<endl<<endl;
          for(int z=0;e[z]!='\0';z++)
            e[z]='\0';
    }
          for(int y=0;y<k;y++)
           {
               e[y]='\0';
               t=0;
           }
return 1;
    }

运行结果:

杭电ojACM1002题目

就是这里:第二个结果这里会多一个0

但是如果只循环一次结果就是正确的

杭电ojACM1002题目

如果有人发现我哪里有问题了,请帮忙指出来,谢谢大家!有东西一起分享,互相学习,互相借鉴!