首页 > 试题广场 >

编程实现将一个N进制数转换成M进制数。

[问答题]
编程实现将一个N进制数转换成M进制数。
将N进制转换为十进制,再将十进制转换为M进制 var a=parseInt("1010111",N); //N进制转换为十进制 var b=a.toString(M); //十进制转换为M进制
发表于 2017-10-08 01:16:10 回复(2)
使用Java自带的interger.pareseint 和 tostring z中带基数的方法
发表于 2017-09-25 15:33:23 回复(0)
先转换成10进制,再进行转换
发表于 2017-08-28 11:11:59 回复(1)
第一:首先我们约定用()来表示一个R进制数的每一位, 每一位数从0~(R-1),因为我们没有足够的标识符来表示每一个数位 例如: 10进制数23表示为(2)(3) 16进制数E表示为(14),9F表示为(9)(15) 2进制数1001表示为(1)(0)(0)(1) 60进制数,(1)(27)代表1小时27分钟 第二:算法思想: 1,用授权相加法将N进制数转换为10进制数 2,将1转化好的10进制数通过辗转相除法转化为M进制, 第三:具体实现: @Test public void test06() { System.out.println(NtoM("(1)(17)",60,10)); System.out.println(NtoM("(7)(7)",10,60)); System.out.println(NtoM("(2)(5)(7)",10,16)); System.out.println(NtoM("(1)(0)(1)",16,10)); } /** * @param nNumber N进制数的约定表达形式如: = 9F * @param N N进制 * @param M M进制 * @return M进制的约定方式 */ public String NtoM(String nNumber, int N, int M) { //N进制的约定字符串 StringBuilder nNumberStr = new StringBuilder(nNumber); //N进制数的每一位化成十进制的值,用list保存 List<Integer> nNumberSize = new ArrayList<>(); for (int i = 0; i < nNumberStr.length(); i++) { nNumberSize.add(Integer.parseInt(nNumberStr.substring(nNumber.indexOf("(") + 1, nNumberStr.indexOf(")")))); nNumberStr.delete(0, nNumberStr.indexOf(")") + 1); } //位数 int SIZE = nNumberSize.size(); //转换好的十进制数 int resultNum = 0; for (int i = 0; i < SIZE; i++) { if (i < SIZE - 1) { resultNum += nNumberSize.get(i) * Math.pow(N, SIZE - 1 - i); } else if (i == SIZE - 1) resultNum += nNumberSize.get(i); } return getMNumberStr(resultNum, M); } /** * @param number 十进制数 * @param M M进制 * @return M进制约定的表达形式 */ public String getMNumberStr(int number, int M) { StringBuilder sb = new StringBuilder(); while (true) { int shang = number / M; int yushu = number % M; if (shang >= M) { //递归调用 sb.append(getMNumberStr(shang, M)); } else { if (shang == 0) { sb.append("(" + yushu + ")"); break; } sb.append("(" + shang + ")"); } //继续相除 number = yushu; } return sb.toString(); }
发表于 2017-08-25 18:30:38 回复(0)
import java.util.Stack; public class A_进制数转换 { public static void main(String[] args) { System.out.println(forMate("10", 8, 10)); } public static int forMate(String count, int N, int M) { int len = count.length(); int C = 1; int X = 0; //存储转化为十进制后的数 for (int i = len - 1; i >= 0; i--) { if (i != len - 1) { C = N * C; } X = X + Integer.parseInt(count.charAt(i) + "") * C; } Stack<Integer> stack = new Stack<>(); while (X >= M) { if (X % M != 0) { stack.push(X % M); X = (X - X % M) / M; } else { X = X / M; stack.push(0); } } stack.push(X); StringBuffer sb = new StringBuffer(""); while (!stack.isEmpty()) { sb.append(stack.pop()); } return Integer.parseInt(sb.toString()); } }
发表于 2018-03-20 13:25:10 回复(0)
function transform(x, former, latter){ var sum = 0, result = '', x = x +""; for(let i = 0; i < x.length; i++){ sum += x.substring(i, i+1) * Math.pow(former, (x.length - i - 1)); } while(sum > 0){ if(sum >= latter){ result += parseInt(sum / latter); if(sum % latter == 0){ result += "0"; } sum = sum % latter; }else { result += sum; sum = 0; } } return result; } console.log(transform(8, 10, 8));
发表于 2018-07-24 07:19:29 回复(0)
python: 手写算法版: def conversion_num(num, src, dest): rtn = '' # 1、校验源和目标是否相同 if src == dest: rtn = num # 2、转成10进制# if src != 10: num_str = str(num) num_str = num_str[::-1] exe_num = 0 dec_num = 0 for num_char in num_str: # 十六进制处理 if num_char == 'A': num_char = '10' elif num_char == 'B': num_char = '11' elif num_char == 'C': num_char = '12' elif num_char == 'D': num_char = '13' elif num_char == 'E': num_char = '14' elif num_char == 'F': num_char = '15' num_int = int(num_char) if exe_num == 0: dec_num += num_int else: dec_num += src ** exe_num * num_int exe_num += 1 num = dec_num # 3、转成目标进制 if dest == 10: rtn = num else: num = int(num) while True: divisor = num // dest remainder = num % dest # 十六进制处理 if remainder == 10: remainder = 'A' elif remainder == 11: remainder = 'B' elif remainder == 12: remainder = 'C' elif remainder == 13: remainder = 'D' elif remainder == 14: remainder = 'E' elif remainder == 15: remainder = 'F' rtn = str(remainder) + rtn if divisor <= 0: break else: num = divisor # 4、处理空的字符串 if rtn == '': rtn = '0' return rtn new_num = conversion_num('111111', 2, 16) print(new_num) 系统调用版: def conversion_num(num, src, dest): rtn = '' # 1、校验源和目标是否相同 if src == dest: rtn = num # 2、转成10进制# if src != 10: dec_num = 0 if src == 2: dec_num = int(num, 2) elif src == 8: dec_num = int(num, 8) elif src == 16: dec_num = int(num, 16) num = dec_num # 3、转成目标进制 if dest == 10: rtn = num else: if dest == 2: rtn = bin(num) elif dest == 8: rtn = oct(num) elif dest == 16: rtn = hex(num) # 4、处理空的字符串 if rtn == '': rtn = '0' return rtn new_num = conversion_num('111111', 2, 16) print(new_num) 参考: https://www.cnblogs.com/sshoub/p/9076881.html
发表于 2018-05-23 15:09:27 回复(0)
import argparse

def convert():
    print('a')
    parse = argparse.ArgumentParser()
    parse.add_argument('-ij','--ij' ,type=init, help='输入的数字的进制')
    parse.add_argument('-i', '--i',type=int, help='输入的数字')
    parse.add_argument('-oj','--oj', type=int, help='转换为多少进制')
    args = parse.pairse_args()
    in_10 = int(str(args.i),args.ij)
    if args.oj == 2:
        output = bin(in_10)
    if args.oj ==8:
        output = oct(in_10)
    if args.oj == 10:
        output = in_10
    if args.oj == 16:
        output = hex(in_10)

    print("输入{}进制的数字{},目标{}进制,转换后的数字为{}".format(args.ij,args.i,args.oj,output))

if __name__ == '__main__':
    convert()

编辑于 2018-04-08 12:46:23 回复(3)
自己写的话,先转10进制再转2进制
发表于 2017-10-21 16:02:19 回复(0)
负数怎么转
发表于 2017-09-20 07:52:47 回复(0)
parseFloat(number,n)
发表于 2017-08-25 09:14:34 回复(0)
&amp;lt;script&amp;gt; function transform(x,n,m){ var result=parseInt(x,n); //将n进制的数x转化为十进制数 return result.toString(m); //将十进制数result转化为m进制的数 } console.log('11111101',2,8); &amp;lt;/script&amp;gt;
编辑于 2018-08-14 15:30:08 回复(0)
d=int(a, m) bin() oct() hex()
发表于 2018-07-31 10:01:49 回复(0)
先讲N转换10位置,然后再转换m室
发表于 2018-04-28 21:59:53 回复(0)
public static void main(String[] args){ Integer i = Integer.parseInt("ff",M); String str = Integer.toString(i,N); System.out.pritln(i+" "+str); }
发表于 2018-03-30 22:59:41 回复(0)
def change_N_to_M(num,N,M): foo = int(str(num),N) result = "" while foo != 0: result += "0123456789abcdefghijklmnopqrstuvwxyz"[foo % M] foo //= M return[::-1]
发表于 2018-03-06 18:25:04 回复(0)
function MtoN(m,mNum,n){ if(typeof m !=='number'||typeof mNum !=='number'||typeof mNum !=='number') throw new Error('请输入正确的参数!') /* 中转10进制 */ const mstr = String(mNum); let tenNum=0; for(let i=mstr.length-1,j=0; i>=0; i--,j++){ if(Number(mstr[i])>=m) throw new Error('请输入正确的参数!'); tenNum+=mstr[i]*Math.pow(m,j); } /* 10进制转n进制 */ const nNum=[]; do{ const mod=tenNum%7; nNum.push(mod) tenNum=Math.floor(tenNum/7); }while(tenNum>0); return nNum.reverse().join(''); }
发表于 2018-01-30 13:03:14 回复(2)
//求大佬指导更好的存储数据的算法//
#include
#include
#include
double ElseToTen(int JZ);//将2—36进制转为10进制
void TenToElse(unsigned long Date);//将10进制转为2—36进制
void ElseToElse();
#define N 20//输入的数据最大支持大位数//可自由更改
int main()
{
    int Choose2;
    int Choose1;
    unsigned long Date;
    double sum;
    do
    {
        printf("1.将任意进制(2-36)的数转换为10进制数\n");
        printf("2.将10进制的数转为任意进制(2-36)\n");
        printf("3.将进制为(2-36)的数转换为进制为(2-36)的数\n");
        printf("0.退出\n");
        printf("请输入你的选择\n");
        scanf("%d",&Choose1);
        system("cls");
        switch(Choose1)
        {
        case 1:printf("请输入你想要转换几进制数:\n");
            scanf("%d",&Choose2);
            sum=ElseToTen(Choose2);
            printf("转换后的结果为:\n%.0lf\n",sum);
            system("pause");
            system("cls");
            break;
        case 2:
            printf("请输入一个十进制数(0~4294967295)\n");
            scanf("%ld",&Date);
            TenToElse(Date);
            system("pause");
            system("cls");
            break;
        case 3:ElseToElse();
            system("pause");
            system("cls");
            break;
        case 0:exit(0);
        }
    }while(Choose1!=0);
}
double ElseToTen(int JZ)
{
    char a[N];
    int i;
    int length;
    int j;
    double sum=0;
    getchar();
    printf("请输入一个%d进制数\n",JZ);
    gets(a);
    //*******获取输入的字符串长度*********//
    length=0;
    while(a[length++]!='\0')
    {
    }
    length--;
    //************************************//
    if(length<N)
    {
        for(i=length-1,j=N-1;i>=0;i--,j--)
            a[j]=a[i];
        for(i=0;i<=N-1-length;i++)
            a[i]='0';
    }
    i=N-length;
    while(i<=N-1)
    {
        if(a[i]>='0'&&a[i]<='9')
            sum+=(a[i]-'0')*pow(JZ,N-1-i);
        else if(a[i]>='a'&&a[i]<='z')
            sum+=(a[i]-'a'+10)*pow(JZ,N-1-i);
        i++;
    }
    return sum;
}
void TenToElse(unsigned long Date)
{
    char a[N];
    int i;
    int key;    
    printf("请输入你想要转换为几进制:");
    scanf("%d",&key);
    i=N;
    while(Date)
    {
        if(Date%key<10)
            a[i]=Date%key+'0';
        else
            a[i]=Date%key-10+'a';
        Date=Date/key;
        i--;
    }
    while(i<=N)
        putchar(a[++i]);
    putchar('\n');
}
void ElseToElse()
{
    short k1;
    long Date;
    printf("原数的进制:");
    scanf("%d",&k1);
    Date=(long)ElseToTen(k1);
    TenToElse(Date);    
}
发表于 2018-01-08 15:30:13 回复(0)
不能用那种 tohexstring方法实现?
发表于 2017-12-06 12:21:24 回复(0)
toString
发表于 2017-11-15 18:12:15 回复(0)