记录编号 88579 评测结果 AAAAAA
题目名称 增强的减法问题 最终得分 100
用户昵称 GravatarTanAp0k 是否通过 通过
代码语言 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;
	}
}