记录编号 |
88579 |
评测结果 |
AAAAAA |
题目名称 |
增强的减法问题 |
最终得分 |
100 |
用户昵称 |
TanAp0k |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.002 s |
提交时间 |
2014-02-21 20:11:03 |
内存使用 |
0.32 MiB |
显示代码纯文本
#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>
using namespace std;
ifstream fin;
ofstream fout;
string x, y;
int xx[101]={0}, yy[101]={0}, result[101]={0};
bool poster=true;//判断结果的正负数的标志,正数为真,负数为假
int maxlength=0;//最大长度
int minlength=0;//最小长度
void get_data();
//前条件:已经链接输入流
//后条件:x,y分别获得两个字符串,x为被减数,y为减数
void compare(string x, string y);
//前条件:第一个参数是减数,第二个参数是被减数,它们已经被赋值
//后条件:判断符号的布尔型变量被赋值。xx和yy分别被倒序赋值,XX代表的被减数的大小大于减数的大小
void sub();
//前条件:已经运行过比较函数compare()
//后条件:进行减法运算,并将结果倒序储存在result数组中
void out_data();
//前条件:已经运行过减法运算函数sub()且已经链接输出流
//后条件:输出结果
int main()
{
fin.open("sub.in");
get_data();//读取数据x,y
compare(x, y);//比较x与y的大小,并判断符号
sub();//进行减法运算
fout.open("sub.out");
out_data();//输出文件
fin.close();
fout.close();
return 0;
}
void get_data()
{
fin >> x >> y;
}
void compare(string x, string y)
{
if (x==y)//比较两个数值的大小
{
fout.open("sub.out");
fout << 0;
fout.close();
exit(0);
}
else if (x.length()==y.length())
{
maxlength=x.length();
minlength=y.length();
if (x>y)//x赋值xx,y赋值yy
{
int j=x.length();
int k=y.length();
for (int i=j, q=0; i>0; i--, q++)
{
xx[q]=x[i-1]-48;
}
for (int i=k, q=0; i>0; i--, q++)
{
yy[q]=y[i-1]-48;
}
}
else //y赋值xx
{
poster=false;
int j=x.length();
int k=y.length();
maxlength=y.length();
minlength=x.length();
for (int i=j, q=0; i>0; i--, q++)
{
yy[q]=x[i-1]-48;
}
for (int i=k, q=0; i>0; i--, q++)
{
xx[q]=y[i-1]-48;
}
}
}
else if (x.length()>y.length())
{
int j=x.length();
int k=y.length();
maxlength=x.length();
minlength=y.length();
for (int i=j, q=0; i>0; i--, q++)
{
xx[q]=x[i-1]-48;
}
for (int i=k, q=0; i>0; i--, q++)
{
yy[q]=y[i-1]-48;
}
}
else if (x.length()<y.length())
{
poster=false;
int j=x.length();
int k=y.length();
maxlength=y.length();
minlength=x.length();
for (int i=j, q=0; i>0; i--, q++)
{
yy[q]=x[i-1]-48;
}
for (int i=k, q=0; i>0; i--, q++)
{
xx[q]=y[i-1]-48;
}
}
}
void sub()
{
for (int i=0; i<maxlength; i++)
result[i]=xx[i];
for (int i=0; i<minlength; i++)
result[i]-=yy[i];
for (int i=0; i<maxlength-1; i++)//进位
{
while (result[i]<0)
{
result[i]+=10;
result[i+1]-=1;
}
}
}
void out_data()
{
bool flag=false;
if (poster==false)
fout << "-";
for (int i=maxlength; i>0; i--)
{
if (result[i-1]!=0)
{
flag=true;
fout << result[i-1];
}
else if (result[i-1]==0 && flag==false)
{
}
else if (result[i-1]==0 && flag==true)
fout << 0;
}
}