输入输出测试了都是正确但结果四个测试点一个都不过
查看原帖
输入输出测试了都是正确但结果四个测试点一个都不过
331640
lllllyj楼主2024/1/1 16:49
#include <stdio.h>
#include <string.h>
#define LEN 2001

void reserve(char arr[], char result[], int len)
{
    int i, j;
    memset(result, 0, LEN);
    for (i = 0, j = len - 1; i < len; i++, j--)
    {
        result[j] = arr[i];
    }
}

void reserve1(char c[])
{
    int i, j=strlen(c)-1;
    char shit;
    for (i = 0; i < j; i++, j--)
    {
        shit=c[i];
        c[i]=c[j];
        c[j]=shit;
    }
}

int plus(char a[], char b[], char c[], int n, int len)
{
    int i, carry = 0;
    memset(c, 0, LEN);
    for (i = 0; i < len; i++)
    {
        int sum = (a[i] - '0') + (b[i] - '0') + carry;
        c[i] = sum % n + '0';
        carry = sum / n;
    }
    while (carry > 0)
    {
        c[i] = carry%n + '0';
        carry/=n;
        i++;
    }
    reserve1(c);
    return i; // 返回c的位数
}

int is_palindrome(char c[], int len)
{
    int i, j;
    for (i = 0, j = len - 1; i < j; i++, j--)
    {
        if (c[i] != c[j])
            return 0;
    }
    return 1;
}

int main()
{
    char a[LEN];
    char b[LEN];
    char c[LEN];

    int n;
    scanf("%d", &n);
    getchar(); // 读取换行符
    fgets(a, LEN, stdin);
    int len = strlen(a);
    if (a[len - 1] == '\n')
    {
        a[len - 1] = '\0'; // 移除fgets读取的换行符
        len--;
    }
    reserve(a, b, len);
    int lennew = plus(a, b, c, n, len);
  //  printf("%s+%s=%s\n", a, b, c);
    int STEP=1;

    while (is_palindrome(c, lennew) == 0)
    {
        strcpy(a, c);
        len = strlen(a);
        reserve(a, b, len);
        lennew = plus(a, b, c, n, len);
      //  printf("%s+%s=%s\n", a, b, c);
        STEP++;
    }

    if (STEP<=30) printf("STEP=%d", STEP);
    else printf("Impossible!\n");

    return 0;
}
2024/1/1 16:49
加载中...