OpenJudge 2736 大整数减法 C++

链接地址: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 }

 

你可能感兴趣的:(open)