| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 116 人关注过本帖
标题:HDU-1002 大数加法 C语言实现 一直AC不了 求助贴
只看楼主 加入收藏
康明贤
Rank: 1
来 自:NWPU
等 级:新手上路
帖 子:28
专家分:7
注 册:2017-10-23
结帖率:80%
  已结贴   问题点数:20  回复次数:1   
HDU-1002 大数加法 C语言实现 一直AC不了 求助贴
A + B问题II
时间限制:2000/1000 MS(Java / Others)内存限制:65536/32768 K(Java /其他)
提交总数:428360接受提交内容:83218


问题描述
我有一个非常简单的问题。给定两个整数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
 
Sample Output
Case 1:
1 + 2 = 3

Case 2:
112233445566778899 + 998877665544332211 = 1111111111111111110
 
我的实现:
#include <stdio.h>
#include <string.h>
int mark;
void add(char a[],char b[],char c[])
{
    int len1,len2;
    int i,j,L=0;
    int temp;
    len1=strlen(a);
    len2=strlen(b);
    for(i=0;i<len1/2;i++)
    {
        temp =  a[i];
        a[i] = a[len1-i-1];
        a[len1-i-1] = temp;
    }
    for(i=0;i<len2/2;i++)
    {
        temp =  b[i];
        b[i] = b[len2-i-1];
        b[len2-i-1] = temp;
    }
    for(i=0;i<len1&&i<len2;i++)
    {
        j = (a[i]-'0'+b[i]-'0'+L)%10;
        L = (a[i]-'0'+b[i]-'0'+L)/10;
        c[i] = j+'0';
    }
    if(i<len1)
    {
        for(;i<len1;i++)
        {
            j = (a[i]-'0'+L)%10;
            L = (a[i]-'0'+L)/10;
            c[i] = j+'0';
        }
    }
    if(i<len2)
    {
        for(;i<len2;i++)
        {
            j = (b[i]-'0'+L)%10;
            L = (b[i]-'0'+L)/10;
            c[i] = j+'0';
        }
    }
    while(L)
    {

        c[i++] =(L%10+'0');
         L/=10;
    }
    mark = i-1;
}
int main()
{
    int k;
    //int i;
    char a[1001],b[1001],c[1001];
    int n;
    scanf("%d",&n);
    int m;
    if(n>=2){
            for(m=0;m<n-1;m++)
               {
            scanf("%s%s",a,b);
              add(a,b,c);
              printf("Case %d:\n",m+1);
           printf("%s + %s = ",a,b);
           for(k=mark;k>=0;k--)
              {
              printf("%c",c[k]);
             }
            printf("\n\n");
              }
              while(scanf("%s%s",a,b)!=EOF)
           {
             add(a,b,c);
             printf("Case %d:\n",n);
             printf("%s + %s = ",a,b);
    for(k=mark;k>=0;k--)
    {
        printf("%c",c[k]);
    }
   printf("\n");
    }
      }
    else
    {
         while(scanf("%s%s",a,b)!=EOF)
    {
        add(a,b,c);
        printf("Case 1:\n");
             printf("%s + %s = ",a,b);
    for(k=mark;k>=0;k--)
    {
        printf("%c",c[k]);
    }
    printf("\n");
    }
    }
    return 0;
}


[此贴子已经被作者于2018-8-9 23:58编辑过]

6 天前 23:56
no1xijin
Rank: 6Rank: 6
来 自:江西
等 级:侠之大者
威 望:1
帖 子:82
专家分:463
注 册:2015-7-8
  得分:20 
参考一下我的一个帖子——大整数(25000位)的四则运算C语言源程序:https://bbs.bccn.net/thread-488504-1-1.html
5 天前 09:36







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023410 second(s), 8 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved