Java写一个函数输出一个整数(第一个参数)在指定基数(第二个参数,整数)下的表示形式以字符串形式输出

如输入参数47和12,此函数输出字符串“3B”。为简单起见,可认为基数最大为16。请检查参数的有效性。
如:(15, 2) => “1111”(15, 8) => “17”
(15, 16) => “F”
(15, 10) => “15”
(323, 8) => “503”
(323, 16) => “143” 怎么样编写?
急急急!!!!

package com.kidd;

import java.util.Scanner;

public class Main {
    private static int maxlength = 16;

    /**
     * 进制转换 把正整数n转换成m进制最后输出字符串格式
     * 
     * @param args
     */
    public static void main(String[] args) {
        int n, m;

        Scanner sc = new Scanner(System.in);
        n = getNum1(sc);

        m = getNum2(sc);

        String s = "";
        s = convert(n, m, s);
        System.out.printf("转换成%d进制的结果是:%s", m, s);

    }

    private static int getNum1(Scanner sc) {
        int n = 0;
        String s;

        boolean end = false;
        while (!end) {
            System.out.print("请输入一个正整数:");
            try {
                s = sc.nextLine();
                n = Integer.parseInt(s);
            } catch (NumberFormatException e) {
                System.out.println("输入不合法,请重新输入");
                continue;
            }
            if (n < 0) {
                System.out.println("输入不合法,请重新输入");
                continue;
            }
            end = true;
        }
        return n;
    }

    private static int getNum2(Scanner sc) {
        int m = 0;
        String s;

        boolean end = false;
        while (!end) {
            System.out.printf("请输入指定基数2~%d之间:", maxlength);
            try {
                s = sc.nextLine();
                m = Integer.parseInt(s);
            } catch (NumberFormatException e) {
                System.out.println("输入不合法,请重新输入");
                continue;
            }
            if (m < 2 || m > 16) {
                System.out.println("输入不合法,请重新输入");
                continue;
            }
            end = true;
        }
        return m;
    }

    /**
     * 用除m取余的方法把正整数n转换成m进制,结果存放到s中
     * 
     * @param n
     * @param m
     * @param s
     * @return
     */
    private static String convert(int n, int m, String s) {
        int i = n / m;
        int j = n - i * m;
        if (i != 0) {
            s = convert(i, m, s);
        }

        switch (j) {
        case 0:
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
        case 6:
        case 7:
        case 8:
        case 9: {
            s = s + j;
            break;
        }
        case 10: {
            s = s + 'A';
            break;
        }
        case 11: {
            s = s + 'B';
            break;
        }
        case 12: {
            s = s + 'C';
            break;
        }
        case 13: {
            s = s + 'D';
            break;
        }
        case 14: {
            s = s + 'E';
            break;
        }
        case 15: {
            s = s + 'F';
            break;
        }
        default: {
            break;
        }
        }

        return s;
    }

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-07
Java任意进制(当然不能小于2不能大于36)的进制转换程序如下:
public class S {
public String transform(int number,int base){
StringBuffer sb=new StringBuffer();
char c = 0;
if(number<0 || base<2 || base>36){
System.out.println("参数要大于零,基数要大于等于2小于等于36!");
return "";
}
while(number>0){
int i=number%base;
if(i>9) {
c=(char)('A'+(i-10));
}
number=number/base;
if(i>9)
sb.append(c);
else
sb.append(i);
}
return sb.reverse().toString();
}
public static void main(String[] args) {
S s=new S();
System.out.println(s.transform(47, 12));
System.out.println(s.transform(15, 2));
System.out.println(s.transform(15, 8));
System.out.println(s.transform(15, 16));
System.out.println(s.transform(15, 10));
System.out.println(s.transform(323, 8));
System.out.println(s.transform(323, 16));
}
}
运行结果:
3B
1111
17
F
15
503
143本回答被提问者和网友采纳
第2个回答  2013-11-07
//希望以下代码可以帮到你

/*如输入参数47和12,此函数输出字符串“3B”。
为简单起见,可认为基数最大为16。请检查参数的有效性。
如:(15, 2) => “1111”(15, 8) => “17”*/
import java.util.*;
public class D
{
public static void getNumber(int x,int y)
{
if(x>=0&&x<=1000)//这里可以控制你的输入数。
{
switch(y)//这里是你的进制选择
{
case 2:
System.out.println(Integer.toBinaryString(x));break;//十进制转二进制
case 8:
System.out.println(Integer.toOctalString(x));break;//十进制转八进制
case 16:
System.out.println(Integer.toHexString(x));//十进制转十六进制
String mm=Integer.toBinaryString(x);

break;//十进制转二进制
}
}
else
{
System.out.println("请重新输入");

}
}

public static void main(String[] args)
{
Scanner in=new Scanner(System.in);
System.out.println("请输入你的数字1———100之间");
int z=in.nextInt();
System.out.println("请输入你的转换进制数2--8--16");
int w=in.nextInt();
getNumber(z,w);
}
}//谢谢
第3个回答  2013-11-07
lz这个就是进制装换呀,你知道这个公式,取基数B,A=B0+B1+B2...后面数字是平方,分俩不走,如下是我的算法,首先确定位数,再输出数
第4个回答  2013-11-07
什么意思 你的需求看不懂
相似回答