PAT练习 数制转换

    技术2026-02-24  20

    PAT练习 数制转换

    题目描述

    求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。

    输入

    输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。

    输出

    可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,...,9,A,B,...,F)。

    样例输入

    4 123 10

    样例输出

    27

    C++实现

    #include <iostream> #include <string.h> #include <stdio.h> using namespace std; int string2num(char p){ if(p>='0'&&p<='9') p-='0'; else if(p>='a'&&p<='f') p-='a'-10; else if(p>='A'&&p<='F') p-='A'-10; return p; } int main(){ int a,b,product; long long n_base10,n_baseb; char string_n[40]; while (scanf("%d %s %d",&a,string_n,&b)!=EOF) { n_base10=0; product=1; for(int i=strlen(string_n)-1;i>=0;i--){ n_base10+=string2num(string_n[i])*product; product*=a; } char z[40]; int num=0; n_baseb=0; do{ if(n_base10%b<10){ z[num++]=n_base10%b+'0'; }else{ z[num++]=n_base10%b-10+'A'; } n_base10/=b; }while(n_base10!=0); for(int i=num-1;i>=0;i--){ printf("%c",z[i]); } printf("\n"); memset(string_n, '\0', sizeof(string_n)); memset(z, '\0', sizeof(z)); } }

     

    用字符串存储和表示不同进制的数。

    Processed: 0.017, SQL: 9