Codeup100000593问题 D: 进制转换

    技术2025-02-28  9

    题目描述:

    将M进制的数X转换为N进制的数输出。

    输入:

    输入的第一行包括两个整数:M和N(2<=M,N<=36)。 下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出。

    输出:

    输出X的N进制表示的数。

    样例输入:

    10 2 11

    样例输出:

    1011

    提示:

    注意输入时如有字母,则字母为大写,输出时如有字母,则字母为小写。

    实现代码:

    #include <cstdio> #include <cstdlib> #include <ctime> #include <cstring> #include <algorithm> #include <math.h> using namespace std; char ans2[1000]; struct bign{ int d[1000]; int len; bign(){ memset(d,0,sizeof(d)); len=0; } }; bign change(char str[]){ bign a; a.len=strlen(str); for(int i=0;i<a.len;i++){ if(str[a.len-i-1]>='0'&&str[a.len-i-1]<='9'){ a.d[i]=str[a.len-i-1]-'0'; }else if(str[a.len-i-1]>='A'&&str[a.len-i-1]<='Z'){ a.d[i]=str[a.len-i-1]-'A'+10; } } return a; } bign divide(bign a,int b,int& r,int m){ bign c; c.len=a.len; for(int i=a.len-1;i>=0;i--){ r=r*m+a.d[i]; if(r<b){ c.d[i]=0; }else{ c.d[i]=r/b; r=r%b; } } while(c.len-1>=1&&c.d[c.len-1]==0){ c.len--; } return c; } // 对m进制数依次除以n,等到余数组成数组的倒序进位所求n进制的数 char* m_to_n(bign a,int n,int m){ int i=0; while(a.len!=1||a.d[0]!=0){ int r=0; a=divide(a,n,r,m); if(r>=0&&r<=9){ ans2[i++]=r+'0'; }else if(r>9){ ans2[i++]=r-10+'a'; } } return ans2; } int main(){ int m,n; char x[10000]; while(scanf("%d%d",&m,&n)!=EOF){ scanf("%s",&x); bign a=change(x); char* ans; ans=m_to_n(a,n,m); int len=strlen(ans); for(int i=len-1;i>=0;i--){ printf("%c",ans[i]); } printf("\n"); memset(ans2,0,sizeof(ans2)); } return 0; }
    Processed: 0.008, SQL: 9