@xunuo
2016-11-25T07:12:08.000000Z
字数 1015
阅读 1136
Time Limit: 1000 MS Memory Limit: 65536 KB
链接:https://www.oj.swust.edu.cn/problem/show/1529
高精度
输入多组数据 m n, 计算m-n的值。
m n 均为非负数,长度不超过100位。
2345436 556
100024234535343435436 654654634534653465
2344880
99369579900808781971
注意前导0
Source
SWUST.dreamone
#include<stdio.h>#include<string.h>#include<math.h>#include<algorithm>using namespace std;int a[110],b[110],sub[110];char s1[110],s2[110];int main(){while(scanf("%s%s",s1,s2)!=EOF){memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(sub,0,sizeof(sub));int l1=strlen(s1);int l2=strlen(s2);for(int i=0;i<l1;i++)a[i]=s1[l1-1-i]-'0';for(int i=0;i<l2;i++)b[i]=s2[l2-1-i]-'0';int flag=0;int l=l1>l2?l1:l2;for(int i=l;i>=0;i--){//判断两数的·大小if(flag==1){int t=a[i];a[i]=b[i];b[i]=t;}else if(a[i]>b[i])break;else if(a[i]<b[i]){int t=a[i];a[i]=b[i];b[i]=t;flag=1;}}for(int i=0;i<l;i++){sub[i]+=a[i]-b[i];if(sub[i]<0){sub[i]+=10;sub[i+1]-=1;}}for(int i=l;i>0;i--){if(sub[i]==0)l--;elsebreak;}if(flag==1)printf("-");for(int i=l;i>=0;i--)printf("%d",sub[i]);printf("\n");}return 0;}
