首页 > 试题广场 >

请问以 3 进制展示的整数 1211012122101,转换

[问答题]
请问以 3 进制展示的整数 1211012122101,转换 16 进制,值为多少?写出答案的同时,编写个任意进制的值转换为 2 进制的值展示的程序。(请用代码实现)
public class Sys {
    //其他进制转换为10进制
    public int toTen(String other,int k){
        StringBuilder sb=new StringBuilder(other);
        String str=sb.reverse().toString();
        int length=str.length();
        int sum=0;
        for(int i=0;i<length;i++){
            int tar=str.charAt(i)-'0';
            sum+=Math.pow(k,i)*tar;
        }
        return sum;
    }
 
    //其他进制转换为2进制
    public String toTwo(String other,int k){
        int sum=toTen(other,k);
        StringBuilder stringBuilder=new StringBuilder();
        while((sum/2)!=0){
            stringBuilder.append(sum%2);
            sum=sum/2;
        }
        if(sum==1) stringBuilder.append(1);
        String result=stringBuilder.reverse().toString();
        return result;
    }
 
    public static void main(String[]args){
        Sys s=new Sys();
        System.out.println(s.toTwo("1211012122101",3));
    }
}

发表于 2020-02-18 16:51:25 回复(0)
答案:11101100011110000101
先转十进制再转二进制即可
代码:
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main()
{
    int t, rem, s[20], m = 0; //m为该任意进制转化为的十进制数
    double jz; //进制
    string n;
    cin >> jz >> n; //输入进制和要转换的该进制数
    double k;
    k = n.length() - 1;
    for (int i = 0; i < n.length(); i++)
    {
        t = n[i] - '0';
        m += t * pow(jz, k);
        k--;
    }
    int j = 0;
    while (m)
    {
        rem = m % 2;
        m /= 2;
        s[j++] = rem;
    }
    while (j > 0)
        cout << s[--j];
    cout << endl;
    return 0;
}
发表于 2020-02-14 16:29:43 回复(0)