您的位置:首页 > 其它

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

2013-10-28 21:11 197 查看

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


提示

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

代码:

#include<iostream>
#include<string.h>
#include<stdlib.h>
using namespace std;
int main()
{
char f1[110],g1[110];
while(cin>>f1>>g1)
{
int f[110]={0},g[110]={0};
int i,j;
int t=strlen(f1),s=strlen(g1);
for(i=t-1,j=0;i>=0;i--,j++)
f[j]=f1[i]-'0';
for(i=s-1,j=0;i>=0;i--,j++)
g[j]=g1[i]-'0';
int sum[110]={0},flag=0;
int up=0;
if((t==s&&strcmp(f1,g1)>=0)||t>s)//此处的if else 是大数减法的核心代码
{
for(i=0;i<=105;i++)
{
if(f[i]>=g[i])
sum[i]=f[i]-g[i];
else
{
sum[i]=f[i]-g[i]+10;
f[i+1]--;
}
}
}
else
{
flag=1;
for(i=0;i<=105;i++)
{
if(g[i]>=f[i])
sum[i]=g[i]-f[i];
else
{
sum[i]=g[i]-f[i]+10;
g[i+1]--;
}
}
}
if(strcmp(f1,g1)==0)
{
cout<<"0"<<endl;
continue;
}
if(flag==1)
cout<<"-";
for(i=105;i>=0;i--)
if(sum[i]!=0)
{
while(i>=0)
{
cout<<sum[i];
i--;
}
break;
}
cout<<endl;
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: