1254: 【基础】高精度减法
内存限制:16 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:40
解决:10
题目描述
高精度减法,求a-b。a,b都是不超过500位的非负整数。
输入
两个非负整数,每行一个。
输出
一个整数,代表两个整数相减之后的结果。
样例输入 复制
33333333333333333333333333333333333333333
22222222222222222222222222222222222222222
样例输出 复制
11111111111111111111111111111111111111111
提示
#include<bits/stdc++.h> using namespace std; #define maxn 520 int a[maxn],b[maxn],c[maxn]; int main(){ string A,B; cin>>A>>B; int lena,lenb,len; lena=A.length(); lenb=B.length(); if (A==B) { cout<<0; return 0; } len=max(lena,lenb); int flag=0; if (A>B) { flag=1; for (int i=A.length()-1;i>=0;i--) a[lena-i]=A[i]-'0'; for (int i=B.length()-1;i>=0;i--) b[lenb-i]=B[i]-'0'; }else { flag=-1; for (int i=B.length()-1;i>=0;i--) a[lenb-i]=B[i]-'0'; for (int i=A.length()-1;i>=0;i--) b[lena-i]=A[i]-'0'; } for (int i=1;i<=len;i++) { if (a[i]>=b[i]) { c[i]=a[i]-b[i]; }else { a[i+1]--; c[i]=a[i]+10-b[i]; } } while (c[len]<=0) len--; if (flag==-1) cout<<"-"; for (int i=len;i>=1;i--) cout<<c[i]; return 0; }