@songpfei
2016-04-16T01:14:44.000000Z
字数 1222
阅读 2091
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 101void 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;elsesum_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);elseBigNumSum(num2, num1, sum);int i = 0;while (sum[i] == '0')i++;printf("%s\n", sum+i);return 0;}
存在的问题:gets读入数据在华为OJ上可以通过,fgets不能通过;?为什么?求告知?