首页
学习
活动
专区
工具
TVP
发布

hdu1002

作者头像
@坤的
发布2018-06-04 10:43:37
4030
发布2018-06-04 10:43:37
举报
文章被收录于专栏:*坤的Blog*坤的Blog

//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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-01-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档