阴阳相易


私信TA

用户名:gouchao

访问量:19322

签 名:

楼上小心你的分数了,我即将爆掉你的菊花

等  级
排  名 221
经  验 6331
参赛次数 2
文章发表 18
年  龄 0
在职情况 待业
学  校
专  业

  自我简介:


参考代码:

//要满足2~16之间的任意进制,假设用 A B C D E F,分别表示 10 11 12 13 14 15

#include <stdio.h>

char* copystr(char aim[],char b[]);        //把字符串b 拷贝到数组 aim[] 中
char* zh_to_char(long x,int jinzhi,char y[]);    //把十进制长整数按照需要的进制,转换成 字符串
int huiwenshu(char x[]);        //判断字符串是否是回文数
long zh_to_d(char x[],int jinzhi);        //把字符串 按照需要的进制,转换成长整数
int len(char x[]);        //字符串的长度
char* fanxu(char x[]);    //将字符串反序保存

int main(void){
    int jinzhi;
    char x[50];
    char y[50];
    int i = 0;      //表示计算的步数
    scanf("%d",&jinzhi);
    fflush(stdin);    //清空缓存
    scanf("%s",x);

    long tmp;
    for(i = 0;i<=30;i++){
        if(huiwenshu(x)) break;        //如果输入的数本身就是回文数,步数为0,直接跳出
        else{
            copystr(y,x);
            fanxu(x);
            tmp = zh_to_d(x,jinzhi) + zh_to_d(y,jinzhi);
            zh_to_char(tmp,jinzhi,x);

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


    return 0;
}

char* copystr(char aim[],char b[]){
    int i = 0;
    while(b[i] != '\0'){
        aim[i] = b[i];
        i++;
    }
    aim[i] = '\0';
    return aim;
}


char* fanxu(char x[]){
    int n = len(x);
    char a[n];
    int i;
    i = 0;
    while(x[i] != '\0'){
        a[i] = x[n-2-i];
        i++;
    }
    a[i] = '\0';
    for(i = 0;i<n;i++){
        x[i] = a[i];
    }
    return x;
}


int len(char x[]){
    int n = 0;
    while(x[n]!= '\0'){
        n++;
    }
    return n+1;
}


long zh_to_d(char x[],int jinzhi){
    long res = 0;
    int i = 0;
    while(x[i]!='\0'){
        switch(x[i]){
            case 'A':
                res = res*jinzhi+10;
                break;
            case 'B':
                res = res*jinzhi+11;
                break;
            case 'C':
                res = res*jinzhi+12;
                break;
            case 'D':
                res = res*jinzhi+13;
                break;
            case 'E':
                res = res*jinzhi+14;
                break;
            case 'F':
                res = res*jinzhi+15;
                break;
            default:
                res = res*jinzhi+x[i]-'0';
                break;
        }
        i++;
    }
    return res;
}

int huiwenshu(char x[]){
    int i;
    int n = len(x);
    char y[n];
    copystr(y,x);
    fanxu(x);

    for(i = 0;i<n;i++){
        if(x[i] != y[i]) break;
    }
    if(i <n) return 0;
    else return 1;

}


char* zh_to_char(long x,int jinzhi,char y[]){

    int i;
    long tmp = x;
    for(i = 0;i<100;i++){
        tmp = x%jinzhi;
        switch(tmp){
            case 10:
                y[i] = 'A';
                break;
            case 11:
                y[i] = 'B';
                break;
            case 12:
                y[i] = 'C';
                break;
            case 13:
                y[i] = 'D';
                break;
            case 14:
                y[i] = 'E';
                break;
            case 15:
                y[i] = 'F';
                break;
            default:
                y[i] = tmp + '0';
                break;
        }
        x = x/jinzhi;
        if(x == 0) {
            i++;
            y[i] = '\0';
            break;
        }
    }
    fanxu(y);
    return y;
}


 

0.0分

0 人评分

  评论区

  • «
  • »