HDU-1002-高精度加法

A + B问题II
时间限制:2000/1000 MS(Java /其他)内存限制:65536/32768 K(Java /其他)
总提交数量:525503接受提交数量:100467

问题描述
对您来说,我有一个非常简单的问题。给定两个整数A和B,您的工作是计算A + B的总和。

输入项
输入的第一行包含一个整数T(1 <= T <= 20),它表示测试用例的数量。然后是T行,每行由两个正整数A和B组成。请注意,这些整数非常大,这意味着您不应使用32位整数对其进行处理。您可以假设每个整数的长度不超过1000。

输出量
对于每个测试用例,您应该输出两行。第一行是“ Case#:”,#表示测试用例的编号。第二行是等式“ A + B = Sum”,Sum表示A + B的结果。请注意,该等式中有一些空格。在两个测试用例之间输出空白行。

样本输入
2
1 2
112233445566778899 998877665544332211

样本输出
情况1:
1 + 2 = 3

情况2:
112233445566778899 + 998877665544332211 = 1111111111111111110

作者
伊格纳修斯

推荐
我们为您精心选择了几个类似的问题: 1000 1001 1004 1003 1008

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
const int MAX=1000;
int max(const char*a,const char*b)
{
    int len_1=strlen(a);
    int len_2=strlen(b);
    return len_1<len_2?len_2:len_1;
}
int main()
{
    int t,s=1;
    char a[1000],b[1000],c[1000],tmp1A[1000],tmp2B[1000];
    int i=0,k=0,len1=0,len2=0,max_len=0,min_len=0;
    scanf("%d",&t);
    getchar();
    while(t--)
    {
        scanf("%s",a);
        getchar();
        scanf("%s",b);
        getchar();
        strcpy(tmp1A,a);
        strcpy(tmp2B,b);
        len1=strlen(a),len2=strlen(b);
        max_len=len1>len2?len1:len2;//得到长数组的长度
        min_len=len1<len2?len1:len2;//得到短的长度
        if(max_len==strlen(a))//如果a数组较长,那么就把b数组加到a数组里面去
        {
            for( k = 0 ; k < min_len ; k++)
            {
                a[max_len-1-k]+=(b[min_len-1-k]-'0');//下标采用逆序访问数组元素
                if(a[max_len-1-k]>'9')//如果存在进位
                {
                    a[max_len-2-k]++;//进位
                    a[max_len-1-k]-=10;//保留个位数
                }
            }
            printf("Case %d:\n",s++);
            printf("%s + %s = %s\n",tmp1A,tmp2B,a);
        }
        // 下面的就是反过来了,b数组较长,而a数组较短
        else
        {
            for(k = 0 ; k < min_len ; k++)
            {
                b[max_len-1-k]+=(a[min_len-1-k]-'0');
                if(b[max_len-1-k]>'9')
                {
                    b[max_len-2-k]++;
                    b[max_len-1-k]-=10;
                }
            }
            printf("Case %d:\n",s++);
            printf("%s + %s = %s\n",tmp1A,tmp2B,b);
        }
        if(t)
            printf("\n");
    }
}
/*
999
10000


*/

猜你喜欢

转载自blog.csdn.net/weixin_46028606/article/details/106581442