首页 > 试题广场 >

进制转换2

[编程题]进制转换2
  • 热度指数:15542 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
将M进制的数X转换为N进制的数输出。

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


输出描述:
输出X的N进制表示的数。
示例1

输入

10 2
11

输出

1011

备注:
注意输入时如有字母,则字母为大写,输出时如有字母,则字母为小写。
#include <stdio.h>
#define N 1000

int Fun(char c){
    if (c>='0'&&c<='9') {
        return c-'0';
    } else {
        return  c-'A'+10;
    }
}

int main(){
    int m, n, k = 0;
    char a[N];
    char b[N];
    char c[] = "0123456789abcdefghijklmnopqrstuvwxyz";
    long long sum = 0;

    scanf("%d%d", &m, &n);
    scanf("%s", a);
    for (int i = 0; a[i]!='\0'; i ++) {
        sum *= m;
        sum += Fun(a[i]);
    }
    while (sum) {
        b[k++] = c[sum%n];
        sum /= n;
    }
    for (int i = k-1; i >= 0; i --) {
        printf("%c", b[i]);
    }
    return 0;


1,m进制转10进制时从高位往低位计算
2,10进制转n进制时从低位往高位存储
发表于 2023-03-02 16:45:15 回复(0)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
char str[1000];
//字符转数字
int chartoint(char c){
    if(c>='0'&&c<='9'){
        return c-'0';
    }else{
        return c-'A'+10;
    }
}
//数字转字符
char inttochar(int x){
    if(x<10){
        return x+'0';
    }else{
        return x-10+'A';
    }
}
void change(int x,int y){
    int len=strlen(str),k=0;
    char ans[100]={'0'};
    for(int i=0,m=0;i<len;m++){
        k=0;
        for(int j=i;j<len;j++){
            int cur=k*x+chartoint(str[j]);
            k=cur%y;
            str[j]=inttochar(cur/y);
        }
        ans[m]=inttochar(k);
        while(str[i]=='0') i++;
    }
    for(int i=strlen(ans)-1;i>=0;i--){
        printf("%c",ans[i]);
    }
    printf("\n");
}
int main(){
    int x,y;
    while(scanf("%d %d",&x,&y)!=EOF){
        scanf("%s",&str);
        change(x,y);
    }
    return 0;
}

发表于 2022-03-02 08:18:58 回复(0)

问题信息

上传者:小小
难度:
3条回答 6091浏览

热门推荐

通过挑战的用户

查看代码