9进制转为19进制

进制转化(c++)

#include <cstdlib> 

int a=strtol(str,&stop,8); //8进制转为10进制

itoa(num,str,16);  //10进制转为16进制 str

问题:输入一个9进制数字串,将其转化为19进制并输出,依次使用a..i,标识数字10..18,例如输入40,输出1h

分析:

1,先把9进制转为10进制

          40(9)=4*9+0*1=36

2,把十进制转为19进制

           17=36%19;1=36/19;1=1%19;

3,把9进制转为10进制,所需函数,f(n),统计位数,f2(p,t),计算t的p次方

代码:

int f2(int p,int t){

    int sum=1,i;

    for(i=0;i<p;i++){

        sum*=t;

    }

    return sum;

}

int f(int n){

    int count=0;

    while(1){

        if(n==0){

            break;

        }

        n=n/10;

        count++;

    }

    return count;

}

main(){

    int n,i,b,j;

    scanf("%d",&n);

    int p=f(n);

    int shi=0,c;

    c=p;

    //printf("%d",p);

    for(i=0;i<c;i++){

        b=n/f2(--p,10);

        shi+=b*f2(p,9);

        //printf("%d",shi);

        n=n-b*f2(p,10);

    }

    printf("%d\n",shi);

    //十进制转19进制

    char a[10];

    i=0;

    while(1){

        int c=shi%19;

        shi=shi/19;

        a[i]=c;

        i++;

        if(shi==0){

            break;

        }

    }

    for(j=i-1;j>=0;j--){

        if(a[j]>=10){

            switch(a[j]){

                case 10:puts("a"); break;

                case 11:puts("b"); break;

                case 12:puts("c"); break;

                case 13:puts("d"); break;

                case 14:puts("e");break;

                case 15:puts("f");break;

                case 16:puts("g");break;

                case 17:puts("h");break;

                case 18:puts("i");break;

            }

        }else{

            printf("%d",a[j]);

        }

    }

}

结果:


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容