首页 > 代码库 > hdu1002

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

hdu1002