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