0分,995

P1015 [NOIP1999 普及组] 回文数

qqq123456qqq @ 2024-03-16 20:45:30

#include<stdio.h>
#include<string.h>
char sa[100000];
int a[100000],b[100000],c[100000],qa,q,u,e;
int main(){
    int w;
    scanf("%d%s",&w,&sa);
    qa=strlen(sa);
    for(int i=1;i<=qa;i++){
        if(sa[qa-i]>='A'&&sa[qa-i]<='Z') a[i]=sa[i]-'A'+10;
        else a[i]=sa[qa-i]-'0';
        //printf("%d ",a[i]);
    }
    for(int i=1;i<=30;i++){
        for(int j=1;j<=qa;j++) b[i]=a[qa-i+1];
        for(int j=1;j<=qa;j++){
            c[j]=(a[j]+b[j]+q)%w;
            q=(a[j]+b[j]+q)/w;
        }
        for(int j=1;j<=qa;j++){
            a[j]=c[j];
        }
        e++;
        for(int j=1;j<=qa;j++){
            if(a[j]==a[qa-j+1]) u=2;
            else{
                u=1;
                break;
            }
        }
        q=0;
        if(u==2) break;
    }
    if(e>=30) printf("Impossible!");
    else printf("STEP=%d",e);
    return 0;
}

by FYH666666 @ 2024-03-24 13:12:52

@qqq123456qqq 1.进制要么10进制以内要么16进制 2.strlen是从0开始计数的,所以你的for循环边界有误 3.建议换个思路重写


by qqq123456qqq @ 2024-03-26 21:42:36

谢谢


|