加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数求和

发布时间:2020-12-14 01:54:49 所属栏目:大数据 来源:网络整理
导读:大数求和 标签(空格分隔): OJ_算法 题目二[大数求和] 描述: 给定两个非常大的正整数A和B,位数在50至100之间。求C=A+B; 题目类别: 字符串 难度: 中级 运行时间限制: 10Sec 内存限制: 128MByte 阶段: 入职前练习 输入: 因为A和B很大,从高位到低位,以字

大数求和

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


题目二[大数求和]

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

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

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

样例输入:
22222222222222222222222222222222222222222222222222
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] = ''; int len2 = strlen(num2); num2[len2 - 1] = '';*/
    if (strlen(num1) < strlen(num2))
        BigNumSum(num1,num2,sum);
    else
        BigNumSum(num2,num1,sum);
    int i = 0;
    while (sum[i] == '0')
        i++;
    printf("%sn",sum+i);
    return 0;
}

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

参考:http://www.voidcn.com/article/p-kvdrslhx-yv.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读