链接地址:http://bailian.openjudge.cn/practice/2736/
题目:
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
- 求2个大的正整数相减的差
- 输入
- 第1行是测试数据的组数n,每组测试数据占2行,第1行是被减数a,第2行是减数b(a > b)。每组测试数据之间有一个空行,每行数据不超过100个字符
- 输出
- n行,每组测试数据有一行输出是相应的整数差
- 样例输入
2 9999999999999999999999999999999999999 9999999999999 5409656775097850895687056798068970934546546575676768678435435345 1- 样例输出
9999999999999999999999990000000000000 5409656775097850895687056798068970934546546575676768678435435344
思路:
套用大整数减法模板
代码:
1 #include <iostream> 2 #include <cstdio> 3 #include <string> 4 using namespace std; 5 6 string sub(string s1,string s2) 7 { 8 int flag = 0; 9 if(s1.length()<s2.length() || (s1.length()==s2.length() && s1 < s2)) 10 { 11 flag = 1; 12 string temp=s1; 13 s1=s2; 14 s2=temp; 15 } 16 17 18 int i,j; 19 for(i=s1.length()-1,j=s2.length()-1;i>=0;i--,j--) 20 { 21 s1[i]=char(s1[i]-(j>=0?s2[j]-‘0‘:0)); //注意细节 22 if(s1[i]-‘0‘<0) 23 { 24 s1[i]=char(s1[i] + 10); 25 s1[i-1]--; 26 } 27 } 28 29 for(i = 0; i < s1.length(); i++) 30 { 31 if(s1[i] != ‘0‘) break; 32 } 33 if(i == s1.length()) i = s1.length()-1; 34 s1 = s1.substr(i); 35 36 if(flag) s1 = "-" + s1; 37 38 return s1; 39 } 40 41 int main() 42 { 43 int n; 44 cin>>n; 45 string str1,str2; 46 while(n--) 47 { 48 cin>>str1>>str2; 49 cout<<sub(str1,str2)<<endl; 50 } 51 return 0; 52 }