比赛 |
防止浮躁的小练习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;
}