求助,找了好多测例,本地都能过,但是全WA
查看原帖
求助,找了好多测例,本地都能过,但是全WA
1258423
YukiSprite楼主2024/1/20 19:13
#include <stdio.h>
#include <stdbool.h>
#include <ctype.h>
#include <stdlib.h>
void getnum(int* num, int *len);
bool isReverse(int *num, int len);
void reverse(int *num, int N, int len, int times);
int charToNum(char c, int N);

int main() {
    int N, len = 0;
    scanf("%d", &N);
    getchar();  // 吸收换行符
    int num[100] = {0};
    getnum(num, &len);
    reverse(num, N, len, 0);
    return 0;
}

void getnum(int* num, int *len) {
    char input[101]; // 假设输入不会超过100个字符
    fgets(input, sizeof(input), stdin); // 读取整行数据

    *len = 0;
    for (int i = 0; i < strlen(input); i++) {
        if (isdigit(input[i])) {
            num[*len] = input[i] - '0';
            (*len)++;
        } else if (input[i] == '\n' || input[i] == '\r') {
            // 遇到换行符结束
            break;
        }
    }
}

void reverse(int *num, int N, int len, int times) {
    if (times >= 30) {
        printf("Impossible!\n");
        return;
    }

    if (isReverse(num, len)) {
        printf("STEP=%d\n", times);
        return;
    }

    int newLen = len + 1;
    int tmp[newLen];
    for(int i = 0; i < newLen; i++) tmp[i] = 0;

    for (int i = 0; i < len; i++) {
        tmp[i] += num[i] + num[len - 1 - i];
        if (tmp[i] >= N) {
            tmp[i] -= N;
            tmp[i + 1] += 1;
        }
    }
    if (tmp[newLen - 1] == 0) newLen--;

    reverse(tmp, N, newLen, times + 1);
}

bool isReverse(int *num, int len) {
    int i = 0, j = len - 1;
    while(i <= j) {
        if(num[i] != num[j]) return false;
        i++; j--;
    }
    return true;
}

int charToNum(char c, int N) {
    if (isdigit(c))
        return c - '0';
    if (N == 16 && isupper(c))
        return c - 'A' + 10;
    return c - 'a' + 10;
}
2024/1/20 19:13
加载中...