黑马程序员技术交流社区
标题:
各位大神啊 这个进制转换有没有更优化的方式
[打印本页]
作者:
朱志江
时间:
2013-3-25 14:44
标题:
各位大神啊 这个进制转换有没有更优化的方式
本帖最后由 朱志江 于 2013-3-26 01:19 编辑
/*
需求:要一个十进制和其它进制之间转换的程序
思想:1、因为进制之间的转换都用相同的程序代码
为了提高函数的复用性和简便写法
要把这些相同的代码给封装定义起来以提高效率
2、定义一个函数把代码给简化封装
步骤:1、定义一个函数返回值类型是void
2、定义一个char类型的数组
3、用while循环来对数值查表和记录
*/
class Jinzhijh//进制提高复用性的集合优化算法
{
public static void main(String[] args)
{
//tobin(6);
tooctal(0);
//tohex(60);
}
//十进制转二进制
public static void tobin(int num)
{
trans(num,1,1);//代码抽取 前1代表基数 后1代表右移位数 下同
}
//十进制转八进制
public static void tooctal(int num)
{
trans(num,7,3);
}
//十进制转十六进制
public static void tohex(int num)
{
trans(num,15,4);
}
public static void trans(int num, int base,int offset)//定义数字 基数 和移动位数
{
if (num==0)//判断语句 如果输入的数字是零 那么就不进行运算 直接返回
{
System.out.print(0);
return;
}
char[] chs = {'0','1','2','3',
'4','5','6','7',
'8','9','A','B',
'C','D','E','F'};//需要用到的进制转换后的值
char[] arr = new char[32];
int pos = arr.length;
while (num!=0) //用while来进行运转
{
int temp =num & base;
arr[--pos] = chs[temp];
num = num >>> offset;
}
for (int x=pos;x<arr.length ;x++ )
{
System.out.print(arr[x]);
}
}
}
最后一句的 for循环语句能不能不用 就是把转换的值先记录下来 然后直接打印出来
作者:
陈圳
时间:
2013-3-25 16:16
public class Program3 {
/**任意进制转换方法
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(changeNum(60,16));
}
public static String changeNum(int num,int base){
char[] checkList={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
StringBuilder numBuilder=new StringBuilder();
while(num!=0){
numBuilder.append(checkList[num%base]);
num/=base;
}
return numBuilder.reverse().toString();
}
}
复制代码
作者:
贾振凯
时间:
2013-3-25 19:03
本帖最后由 贾振凯 于 2013-3-25 19:05 编辑
import static java.lang.Math.log10;
/**
* 可以完成任意进制转换
* @param num 要转换的目标和数
* @param base 进制的选择参数 2,8,16
*/
public void toBOH(int num,int base){
StringBuilder sb = new StringBuilder();
int temp = num , temp2;
int offset = (int)(log10(base)/log10(2));//计算出基于base进制的偏移量
if((base!=0)){
while(temp != 0){
temp2 = temp&(base-1);
sb.append(arr[temp2]);
temp = temp>>>offset;
}
}else{
System.out.println("输入错误,请确认后输入!");
}
System.out.print(sb.reverse().toString());
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2