[关闭]
@songpfei 2016-04-16T09:14:44.000000Z 字数 1222 阅读 1805

大数求和

OJ_算法


题目二[大数求和]

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

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

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

样例输入:
11111111111111111111111111111111111111111111111111
22222222222222222222222222222222222222222222222222

样例输出:
33333333333333333333333333333333333333333333333333

代码

  1. #include<stdio.h>
  2. #include<string.h>
  3. #define N 101
  4. void BigNumSum(char* num1, char* num2, char* sum)
  5. {
  6. int len1 = strlen(num1);
  7. int len2 = strlen(num2);
  8. int sum_bit_h = 0;
  9. int sum_bit = 0;
  10. memset(sum, 0, N*sizeof(char));
  11. for (int i = len2; i > 0; i--)
  12. {
  13. if (i - len2 + len1 - 1 >= 0)
  14. sum_bit = num1[i - len2 + len1 - 1] - '0' + num2[i - 1] - '0' + sum_bit_h;
  15. else
  16. sum_bit = num2[i - 1] - '0' + sum_bit_h;
  17. sum[i] = sum_bit%10 + '0';
  18. sum_bit_h = sum_bit / 10;
  19. }
  20. sum[0] = (char)(sum_bit_h + '0');
  21. }
  22. int main()
  23. {
  24. char num1[N], num2[N], sum[N];
  25. gets(num1);//这种读取方式可以通过
  26. gets(num2);
  27. /*fgets(num1, sizeof(num1), stdin);//在华为OJ上,使用这种读取方式运行不通过,求解释?
  28. fgets(num2, sizeof(num2), stdin);
  29. int len1 = strlen(num1);
  30. num1[len1 - 1] = '\0';
  31. int len2 = strlen(num2);
  32. num2[len2 - 1] = '\0';*/
  33. if (strlen(num1) < strlen(num2))
  34. BigNumSum(num1, num2, sum);
  35. else
  36. BigNumSum(num2, num1, sum);
  37. int i = 0;
  38. while (sum[i] == '0')
  39. i++;
  40. printf("%s\n", sum+i);
  41. return 0;
  42. }

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

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

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注