比赛 防止浮躁的小练习v0.4 评测结果 AAAAAA
题目名称 增强的减法问题 最终得分 100
用户昵称 Lethur 运行时间 0.001 s
代码语言 C++ 内存使用 0.29 MiB
提交时间 2016-10-13 18:32:53
显示代码纯文本
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<time.h>
#include<malloc.h>
int main()
{
	freopen("sub.in","r",stdin);
	freopen("sub.out","w",stdout); 
	char N[2001];
	char M[2001];
	int i,j,k;
	int n[2001]={0};
	int m[2001]={0};
	int nm[2001]={0};
	int t;
	int lenn;
	int lenm;
	int lennm;
	scanf("%s %s",N,M);
	if(strcmp(N,M)==0)
	{
		printf("0");
		return 0;
	 } 
	lenn=strlen(N);
	lenm=strlen(M);
	for(i=0;i<lenn;i++)//这里已经将整串数字倒过来了,便于之后的减法对位 
    n[lenn-i-1]=N[i]-48;
    for(i=0;i<lenm;i++)
    m[lenm-i-1]=M[i]-48;
	if(lenn>lenm)
	{
		t=1;
	}
	else if(lenn<lenm)
	{
		t=0;
	}
	else
	{
		for(i=lenn;i>=0;i--)
		{
			if(n[i]>m[i])
			{
				t=1;
				break;
			} 
			else if(n[i]<m[i])
			{
				t=0;
				break;
			}
		}
	}
	if(lenn>lenm)
	{
		lennm=lenn;
	}
	else
	{
		lennm=lenm;
	}
	if(t==1) 
	{
	for(i=0;i<lennm;i++)//因为之前的数列已经倒过来了 
	{
		if(n[i]<m[i])//如果不够减,进位 
		{
			n[i+1]--;
			n[i]=n[i]+10;
		}
		nm[i]=n[i]-m[i];
	}
	for(i=lennm-1;i>=0;i--)
    {
    	if(nm[i]!=0)
    	break;
	} 
	for(;i>=0;i--)
	{
		printf("%d",nm[i]);
	}
    return 0;
	}
	if(t==0)
	{
	for(i=0;i<lennm;i++)
    {
       if (m[i]<n[i]) 
	   {
	    m[i+1]--;
	    m[i]=m[i]+10;
	   }    
       nm[i]=m[i]-n[i];
    }
    printf ("-");
    for(i=lennm-1;i>=0;i--)
	{
		if(nm[i]!=0)
		break; 
	 } 
    for(;i>=0;i--)
    {
    	printf("%d",nm[i]);
	}
    return 0;
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
 }