@songpfei
2016-04-16T09:14:44.000000Z
字数 1222
阅读 1823
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不能通过;?为什么?求告知?