本帖最后由 朱志江 于 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循环语句能不能不用 就是把转换的值先记录下来 然后直接打印出来 |