比赛 NOIP2015普及组练习 评测结果 AAAWAA
题目名称 增强的减法问题 最终得分 83
用户昵称 sxysxy 运行时间 0.007 s
代码语言 C++ 内存使用 0.31 MiB
提交时间 2015-11-06 18:50:16
显示代码纯文本
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
using namespace std;
#define MAXN (511)
char a[MAXN];
char b[MAXN];
char c[MAXN];
int la,lb;
int fh = 0;     //正数  //1的话就是负数了 

void mov()
{
	int i,j,k;
	if(la < lb)
	{
		j = lb - la;
		for(k = lb-1; k >= j; k--)
		{
			a[k] = a[k-j];
			a[k-j] = 0;
		}
	}else if(la > lb)
	{
		j = la - lb;
		for(k = la-1; k >= j; k--)
		{
			b[k] = b[k-j];
			b[k-j] = 0;	
		}
	}
}

void judge()
{
	int t;
	string s1,s2;
	if(la < lb || (la==lb && strcmp(a,b)<0))
	{
		s1 = a;
		s2 = b;
		strcpy(a, s2.c_str());
		strcpy(b, s1.c_str());
		fh = 1;	
		t = la;
		la = lb;
		lb = t;
	}
}

int main()
{
	freopen("sub.in", "r", stdin);
	freopen("sub.out", "w", stdout);
	int i,j;
	scanf("%s %s", a, b);
	la = strlen(a);
	lb = strlen(b);
		
	judge();
	
	for(i = 0; i < la; i++)
		a[i] -= '0'; 			 //得到相应数字 
	for(j = 0; j < lb; j++)
		b[j] -= '0';
	mov();         				//按位对齐 
	
	for(i = 1; i <= max(la,lb); i++)
		c[i] = a[i-1]-b[i-1];          
									   
	for(j = max(la,lb); j >= 1; j--)
	{					
		if(c[j] < 0)					
		{									
			c[j-1] -= 1;
			c[j] += 10;
		}	
	}	
	
	if(fh)putchar('-');
	int f = 1;
	for(i = 0; i <= max(la,lb); i++)
	{
		if(c[i] == 0 && f)continue;			//去掉开头多余的0 
		putchar(c[i]+'0');
		f = 0;
	}
	
	putchar('\n');
	return 0;
}