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

 

posted @ 2013-10-28 21:11  狂盗一枝梅  阅读(561)  评论(0编辑  收藏  举报