大数减法
1 #include <stdio.h> 2 #include <iostream> 3 #include <string> 4 using namespace std; 5 6 string sub(string str1, string str2) 7 { 8 string str; 9 int flag = 0; 10 if(str1.length() < str2.length() || ((str1.length() == str2.length()) && (str1[1] < str2[1]))) 11 { 12 flag = 1; 13 string str = str1; 14 str1 = str2; 15 str2 = str; 16 } 17 int tmp = str1.length() - str2.length(); 18 int ans = 0; 19 for(int i = str2.length() - 1; i >= 0;i--) 20 { 21 if(str1[tmp + i] < str2[i] + ans) 22 { 23 str = char(10 - ans + str1[tmp + i] - str2[i] + '0') + str; 24 ans = 1; 25 } 26 else{ 27 str = char(str1[tmp + i] - ans - str2[i] + '0') + str; 28 ans = 0; 29 } 30 } 31 for(int i = tmp - 1; i >= 0;i--) 32 { 33 if(str1[i] - ans >= '0') 34 { 35 str = char(str1[i] - ans) + str; 36 ans = 0; 37 } 38 else{ 39 str = char(str1[i] + 10 - ans) + str; 40 ans = 1; 41 } 42 } 43 str.erase(0,str.find_first_not_of('0')); 44 if(flag) 45 str = '-' + str; 46 return str; 47 } 48 49 int main() 50 { 51 string str1, str2; 52 while(cin >> str1 >> str2) 53 { 54 cout << sub(str1,str2) << endl; 55 } 56 return 0; 57 }
两个数均为非负数