P2142 高精度减法

来源:互联网 发布:酒吧骰子软件 编辑:程序博客网 时间:2024/05/17 00:54
#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int MAXN = 10000+10;inline int get(){char c;while((c = getchar()) < '0' || c > '9');int cnt = c - '0';while((c = getchar()) >= '0' && c <= '9') cnt = cnt * 10 + c - '0';return cnt;}struct data{int a[MAXN],len;data(int len = 1){ // 少 len = 1 memset(a,0,sizeof(a));}data operator - (const data &b){data c;c.len = max(len,b.len);for(int i = 1; i <= c.len; i++){c.a[i] += a[i] - b.a[i];if(c.a[i] < 0){c.a[i+1] --;c.a[i] += 10;}}while(c.a[c.len] == 0 && c.len > 1) c.len--; // 少 c.len >= 1 return c;}}a,b;char s1[MAXN],s2[MAXN],s3[MAXN];inline void Swap(){int len1 = strlen(s1);int len2 = strlen(s2);for(int i = 0; i < len1; i++){s3[i] = s1[i];}memset(s1,0,sizeof(s1));for(int i = 0; i < len2; i++){s1[i] = s2[i];}memset(s2,0,sizeof(s2));for(int i = 0; i < len1; i++){s2[i] = s3[i];}return;}inline void comp(){int len1 = strlen(s1);int len2 = strlen(s2);if(len1 < len2){printf("-");Swap();return;}if(len1 == len2){for(int i = 0; i < len1; i++){if(s1[i] < s2[i]){printf("-");Swap();return;}if(s1[i] > s2[i]) return;}}}int main(){/*#ifdef lwyfreopen("in.txt","r",stdin);#elsefreopen(".in","r",stdin);freopen(".out","w",stdout);#endif*/ scanf("%s %s",s1,s2);comp();a.len = strlen(s1);b.len = strlen(s2);for(int i = a.len - 1; i >= 0; i--){a.a[a.len-i] = s1[i] - '0';}for(int i = b.len - 1; i >= 0; i--){b.a[b.len-i] = s2[i] - '0';}a = a - b;for(int i = a.len; i >=1; i--){printf("%d",a.a[i]);}return 0;}

原创粉丝点击