A-B 练习【大数减法举例】

 

A-B

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

题目链接http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2102

每读入两个整数,输出其差。

输入

输入数据含有不超过50个的整数对,每个整数和每对整数的运算结果都不会超过±2^31。

输出

对于每次读入的一对整数,输出前者减去后者的差。每个结果应以回车结束。

示例输入

1 3

5 7

示例输出

-2

-2

提示

     很明显,这是一道在整型范围内的减法运算,但是网上也找不到有关大数减法的题目,用这道题目抛砖引玉,也勉强凑合~

代码:

 1 #include<iostream>

 2 #include<string.h>

 3 #include<stdlib.h>

 4 using namespace std;

 5 int main()

 6 {

 7     char f1[110],g1[110];

 8     while(cin>>f1>>g1)

 9     {

10     int f[110]={0},g[110]={0};

11     int i,j;

12     int t=strlen(f1),s=strlen(g1);

13     for(i=t-1,j=0;i>=0;i--,j++)

14         f[j]=f1[i]-'0';

15     for(i=s-1,j=0;i>=0;i--,j++)

16         g[j]=g1[i]-'0';

17     int sum[110]={0},flag=0;

18     int up=0;

19     if((t==s&&strcmp(f1,g1)>=0)||t>s)//此处的if else 是大数减法的核心代码

20     {

21         for(i=0;i<=105;i++)

22         {

23            if(f[i]>=g[i])

24              sum[i]=f[i]-g[i];

25            else 

26            {

27                sum[i]=f[i]-g[i]+10;

28                f[i+1]--;

29            }

30         }

31     }

32     else 

33     {

34         flag=1;

35         for(i=0;i<=105;i++)

36         {

37            if(g[i]>=f[i])

38              sum[i]=g[i]-f[i];

39            else 

40            {

41                sum[i]=g[i]-f[i]+10;

42                g[i+1]--;

43            }

44         }

45     }

46     if(strcmp(f1,g1)==0)

47     {

48         cout<<"0"<<endl;

49         continue;

50     }

51     if(flag==1)

52         cout<<"-";

53     for(i=105;i>=0;i--)

54         if(sum[i]!=0)

55         {

56             while(i>=0)

57             {

58                 cout<<sum[i];

59                 i--;

60             }

61             break;

62         }

63         cout<<endl;

64     }

65         return 0;

66 }
View Code

 

你可能感兴趣的:(a)