思路:
和大数加法是一样的,只不过加变成了减。
1 #include<iostream> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 const int L=110; 6 string sub(string a,string b)//只限两个非负整数相加 7 { 8 9 string ans; 10 int na[L] = {0}; 11 int nb[L] = {0}; 12 int la = a.size(); 13 int lb = b.size(); 14 //倒序存储 15 for (int i=0;i<la;i++) 16 { 17 na[la-1-i] = a[i]-'0'; 18 } 19 //倒叙存储 20 for (int i=0;i<lb;i++) 21 { 22 nb[lb-i-1] = b[i]-'0'; 23 } 24 int lmax = max(la,lb); 25 //从个位开始相减 26 for (int i=0;i<lmax;i++) 27 { 28 na[i] -= nb[i]; 29 while (na[i]<0) 30 { 31 na[i] += 10; 32 na[i+1]--; 33 } 34 } 35 //处理前置0 36 while (!na[lmax]) 37 lmax--; 38 if (lmax<0) 39 ans = "0"; 40 else { 41 for (int i = lmax; i >= 0; i--) 42 ans += na[i] + '0'; 43 } 44 return ans; 45 } 46 int main() 47 { 48 string a,b; 49 while(cin>>a>>b) cout<<sub(a,b)<<endl; 50 return 0; 51 }