【问题描述】
两个任意十一位数的减法;(小于二十位)
【输入说明】
输入两个数,分两行
【输出说明】
输出两个数的差值;(被减数比减数要大)
#include <bits/stdc++.h> using namespace std; const int maxL=200; string s1,s2; int lena,lenb,lenc; int a[maxL],b[maxL],c[maxL]; void subtract(int a[],int lena,int b[],int lenb,int c[],int &lenc) { memset(c,0,sizeof(c)); lenc=lena; for(int i=0;i<lenc;++i) { c[i]+=a[i]-b[i]; if(c[i]<0) { --c[i+1]; c[i]+=10; } } //删除前导0 for(; lenc>1 && c[lenc-1]==0;--lenc); } int main() { cin>>s1>>s2; lena=s1.length(); lenb=s2.length(); //s1所表示的数比S2的情况 if(lena<lenb || (lena==lenb && s1<s2)) { swap(s1,s2); swap(lena,lenb); cout<<'-'; } for(int i=0;i<lena;++i) { a[i]=s1[lena-i-1]-'0'; } for(int i=0;i<lena;++i) { b[i]=s2[lena-i-1]-'0'; } subtract(a,lena,b,lenb,c,lenc); for(int i=lenc-1;i>=0;--i) { cout<<c[i]; } cout<<endl; return 0; }