链接地址: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 }
来源:https://www.cnblogs.com/mobileliker/p/3516927.html