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