大数求和

本文探讨了大数相加的问题,给定50至100位的大整数A和B,要求计算它们的和C。题目属于字符串处理的中级难度,时间限制为10秒,内存限制为128MB。在输入部分,大数以字符串形式给出,输出同样以字符串返回。示例展示了两个极值案例。在实现过程中,发现使用`gets`在华为在线评测系统上能正确运行,但`fgets`却无法通过,作者提出了这个问题并寻求解答。参考链接提供了相关讨论。

大数求和

标签(空格分隔): OJ_算法


题目二[大数求和]

描述:
给定两个非常大的正整数A和B,位数在50至100之间。求C=A+B;

题目类别: 字符串
难度: 中级
运行时间限制: 10Sec
内存限制: 128MByte
阶段: 入职前练习
输入:
因为A和B很大,从高位到低位,以字符串的形式输入两行数字A和B。A和B的位数在50至100之间。

输出:
以字符串形式,输出一行,表示A和B的和。

样例输入:
11111111111111111111111111111111111111111111111111
22222222222222222222222222222222222222222222222222

样例输出:
33333333333333333333333333333333333333333333333333

代码

#include<stdio.h>
#include<string.h>

#define N 101


void BigNumSum(char* num1, char* num2, char* sum)
{
    int len1 = strlen(num1);
    int len2 = strlen(num2);

    int sum_bit_h = 0;
    int sum_bit = 0;
    memset(sum, 0, N*sizeof(char)); 
    for (int i = len2; i > 0; i--)
    {
        if (i - len2 + len1 - 1 >= 0)
            sum_bit = num1[i - len2 + len1 - 1] - '0' + num2[i - 1] - '0' + sum_bit_h;
        else
            sum_bit = num2[i - 1] - '0' + sum_bit_h;
        sum[i] = sum_bit%10 + '0';
        sum_bit_h = sum_bit / 10;
    }
    sum[0] = (char)(sum_bit_h + '0');
}

int main()
{
    char num1[N], num2[N], sum[N];
    gets(num1);//这种读取方式可以通过
    gets(num2);
    /*fgets(num1, sizeof(num1), stdin);//在华为OJ上,使用这种读取方式运行不通过,求解释?
    fgets(num2, sizeof(num2), stdin);
    int len1 = strlen(num1);
    num1[len1 - 1] = '\0';
    int len2 = strlen(num2);
    num2[len2 - 1] = '\0';*/
    if (strlen(num1) < strlen(num2))
        BigNumSum(num1, num2, sum);
    else
        BigNumSum(num2, num1, sum);
    int i = 0;
    while (sum[i] == '0')
        i++;
    printf("%s\n", sum+i);
    return 0;
}


存在的问题:gets读入数据在华为OJ上可以通过,fgets不能通过;?为什么?求告知?

参考:http://blog.csdn.net/sunnyyoona/article/details/46675553

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值