hdu1002

//c //https://github.com/ssdutyuyang199401/hduacm/blob/master/1002.c #include<stdio.h> #include<string.h> int shu(char a) { return (a-'0'); } int main(){ char a[1000],b[1000]; int num[1001]; int n,i,j=1,al,bl,k,t; scanf("%d",&n); while(n--) { if(j!=1) printf("\n"); scanf("%s",a); al=strlen(a); scanf("%s",b); bl=strlen(b); k=(al>bl)?al:bl; for(i=0;i<=k;i++) num[i]=0; t=k; for(k;al>0&&bl>0;k--) { num[k]+=shu(a[--al])+shu(b[--bl]);

       if(num[k]/10)  
       {  
           num[k-1]++;  
           num[k]%=10;  
       }  
   }  
   while(al>0)  
   {  
        num[k--]+=shu(a[--al]);  
        if(num[k+1]/10)  
       {  
           num[k]++;  
           num[k+1]%=10;  
       }  
   }  
   while(bl>0)  
   {  
        num[k--]+=shu(b[--bl]);  
        if(num[k+1]/10)  
       {  
           num[k]++;  
           num[k+1]%=10;  
       }  
   }  

   printf("Case %d:\n",j++);  
   printf("%s + %s = ",a,b);  
   for(i=0;i<=t;i++)  
   {  
       if(i==0&&num[i]==0)  
       i++;  
       printf("%d",num[i]);  
   }  
   printf("\n");  

} return 0; }

//c++ //https://github.com/wangkendy/hduacm/blob/master/1002.cpp #include  #include  #include  using namespace std;

class BigInt { public: BigInt operator+(const BigInt& rhs) const { BigInt res; int len1 = num.size(); int len2 = rhs.num.size(); int len = (len1 > len2) ? len1 : len2; len += 1; res.num.resize(len); vector v1(len, 0); vector v2(len, 0); int j = len - 1; for (int i = len1 - 1; i >= 0; i--) { v1[j] = num[i]; j--; } j = len - 1; for (int i = len2 - 1; i >= 0; i--) { v2[j] = rhs.num[i]; j--; } int c= 0; int tmp; for (int i = len - 1; i >= 0; i--) { tmp = v1[i] + v2[i] + c; res.num[i] = tmp % 10; c = tmp / 10; } return res; }

friend istream& operator>>(istream& in, BigInt &op) {
    in >> op.str;
    op.num.resize(op.str.size());
    for (int i = 0; i < op.str.size(); i++)
        op.num[i] = op.str[i] - '0';
    return in;
}

friend ostream& operator<<(ostream& out, BigInt &op) {
    int i = 0;
    while (op.num[i] == 0)
        i++;
    for (; i < op.num.size(); i++)
        cout << op.num[i];
    return out;
}

private: vector num; string str; };

int main() { int T; cin >> T; BigInt a, b; BigInt res; for (int i = 1; i <= T; i++){ cin >> a >> b; res = a + b; cout << "Case " << i << ":" << endl; cout << a << " + " << b << " = " << res << endl; if (i != T) cout << endl;; } return 0; }

//c# //未通过,表达形式错误。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

namespace acm { class Program {

    static int shu(char a)
    {
        return (a - '0');
    }

    // static void Main(string[] args)

    static void Main(string[] args)
    {
         //char a[1000], b[1000];
         char[] numA=new char [1000] ,numB=new char [1000];
        //int num[1001];
        int[] numSum= new Int32[1001];
        int n, i, j = 1, al, bl, k, t;
        // scanf("%d", &n);
        n = Convert.ToInt32(Console.ReadLine());
        while (n-- > 0)
        {
            if (j != 1)
                // printf("\n");
                Console.Write("\n");
            string s = Console.ReadLine();
            string[] str = s.Split(' ');
            numA = str[0].ToCharArray();
            numB = str[1].ToCharArray();

            //scanf("%s", a);
            //al = strlen(a);
            //scanf("%s", b);
            //bl = strlen(b);
            al = numA.Length;
            bl = numB.Length;

            k = (al > bl) ? al : bl;
            for (i = 0; i <= k; i++)
                numSum[i] = 0;
            t = k;
            for (; al > 0 && bl > 0; k--)
            {
                numSum[k] += shu(numA[--al]) + shu(numB[--bl]);

                if (numSum[k] / 10>0)
                {
                    numSum[k - 1]++;
                    numSum[k] %= 10;
                }
            }
            while (al > 0)
            {
                numSum[k--] += shu(numA[--al]);
                if (numSum[k + 1] / 10>0)
                {
                    numSum[k]++;
                    numSum[k + 1] %= 10;
                }
            }
            while (bl > 0)
            {
                numSum[k--] += shu(numB[--bl]);
                if (numSum[k + 1] / 10>0)
                {
                    numSum[k]++;
                    numSum[k + 1] %= 10;
                }
            }

            Console.Write("Case {0}:\n", j++);
            Console.Write("{0} + {1} = ", new string(numA), new string(numB));
            for (i = 0; i <= t; i++)
            {
                if (i == 0 && numSum[i] == 0)
                    i++;
                Console.Write("{0}", numSum[i]);
            }
            Console.Write("\n");
        }
        
    }
}

}

//java

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券