[关闭]
@xunuo 2016-11-25T07:12:08.000000Z 字数 1015 阅读 823

高精度减法

Time Limit: 1000 MS Memory Limit: 65536 KB

链接:https://www.oj.swust.edu.cn/problem/show/1529
高精度


Description

输入多组数据 m n, 计算m-n的值。
m n 均为非负数,长度不超过100位。

Sample Input

2345436 556
100024234535343435436 654654634534653465

Sample Output

2344880
99369579900808781971

Hint

注意前导0
Source 

SWUST.dreamone

完整代码:

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<math.h>
  4. #include<algorithm>
  5. using namespace std;
  6. int a[110],b[110],sub[110];
  7. char s1[110],s2[110];
  8. int main()
  9. {
  10. while(scanf("%s%s",s1,s2)!=EOF)
  11. {
  12. memset(a,0,sizeof(a));
  13. memset(b,0,sizeof(b));
  14. memset(sub,0,sizeof(sub));
  15. int l1=strlen(s1);
  16. int l2=strlen(s2);
  17. for(int i=0;i<l1;i++)
  18. a[i]=s1[l1-1-i]-'0';
  19. for(int i=0;i<l2;i++)
  20. b[i]=s2[l2-1-i]-'0';
  21. int flag=0;
  22. int l=l1>l2?l1:l2;
  23. for(int i=l;i>=0;i--)
  24. {//判断两数的·大小
  25. if(flag==1)
  26. {
  27. int t=a[i];
  28. a[i]=b[i];
  29. b[i]=t;
  30. }
  31. else if(a[i]>b[i])
  32. break;
  33. else if(a[i]<b[i])
  34. {
  35. int t=a[i];
  36. a[i]=b[i];
  37. b[i]=t;
  38. flag=1;
  39. }
  40. }
  41. for(int i=0;i<l;i++)
  42. {
  43. sub[i]+=a[i]-b[i];
  44. if(sub[i]<0)
  45. {
  46. sub[i]+=10;
  47. sub[i+1]-=1;
  48. }
  49. }
  50. for(int i=l;i>0;i--)
  51. {
  52. if(sub[i]==0)
  53. l--;
  54. else
  55. break;
  56. }
  57. if(flag==1)
  58. printf("-");
  59. for(int i=l;i>=0;i--)
  60. printf("%d",sub[i]);
  61. printf("\n");
  62. }
  63. return 0;
  64. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注