比赛 |
防止浮躁的小练习v0.4 |
评测结果 |
AAAAAA |
题目名称 |
增强的减法问题 |
最终得分 |
100 |
用户昵称 |
丿Mht丶闪电 |
运行时间 |
0.012 s |
代码语言 |
C |
内存使用 |
0.29 MiB |
提交时间 |
2016-10-13 18:25:58 |
显示代码纯文本
#include<string.h>
#include<stdio.h>
#define N (200)
int comp(char *p, char *q, int n){
if (n == 0){
return 0;
}
return (*p == *q) ? comp(p + 1, q + 1, n - 1) : (*p - *q);
}
void swap(char *p, char *q, int n){
if (n == 0){
return;
}
*p ^= *q ^= *p ^= *q;
swap(p + 1, q + 1, n - 1);
}
int main()
{
freopen("sub.in","r",stdin);
freopen("sub.out","w",stdout);
int i, j, k;
int c, c2, t, f;
char x[N + 1], y[N + 1], r[N + 1];
scanf("%s%s", x,y);
j =strlen(x);
if (j < N){
for (i = j; i >= 0; i--){
x[i+ (N - j)] =x[i];
}
for (i = 0; i < (N - j); i++){
x[i]= 48;
}
}
k =strlen(y);
if (k < N){
for (i = k; i >= 0; i--){
y[i+ (N - k)] =y[i];
}
for (i = 0; i < (N - k); i++){
y[i]= 48;
}
}
t =comp(x, y, N);
if (t < 0){ // x<y
swap(x,y, N);
}
r[N] = 0;
c2 = 0;
for (i = N - 1; i >= 0; i--){
if (c2 == 1){
c= (x[i] <= y[i]) ? 1 : 0;
r[i]= 48 + (x[i] - 1 + 10 - y[i]) % 10;
}
else{
c= (x[i] < y[i]) ? 1 : 0;
r[i]= 48 + (x[i] + 10 - y[i]) % 10;
}
c2= c;
}
f = -1;
for (i = 0; i < N; i++){
if (r[i] > 48){
f= i;
break;
}
}
if (f == -1){
f++;
r[1]= 0;
}
if (t < 0){
printf("-");
}
printf("%s\n", r +f);
return 0;
}