日期:2014-05-20  浏览次数:21059 次

7进制转10进制
有大牛说用位移运算做,我没想出怎么个原理,我是按权值循环乘以7算的。。。

------解决方案--------------------
你的输入数据是什么格式的?
可以参考2个方法
Integer.parseInt(string,radix) 根据radix(进制)转换文本为数据
Integer.toString(int,radix) 根据radix(进制)输出数字的N进制格式
------解决方案--------------------
给你一个16进制转10进制的。你看看算法思想

public static int toTen(String expression){
char []ch = expression.toCharArray();
int sum = 0;
for(int i = 0;i < ch.length;i++){
char c = ch[ch.length-1-i];
int value = Character.digit(c, 16);
sum += value * (1<<(4*i));
}
return sum;
}
------解决方案--------------------
7 进制没法移位
------解决方案--------------------
楼主在哪里有用到7进制?!
------解决方案--------------------
7进制,很是特别呀。
说起原理,除了笨办法,想不出来其他的了!
------解决方案--------------------
探讨

你的输入数据是什么格式的?
可以参考2个方法
Integer.parseInt(string,radix) 根据radix(进制)转换文本为数据
Integer.toString(int,radix) 根据radix(进制)输出数字的N进制格式

------解决方案--------------------
表示没遇到过7进制,如果是面试题问的话,可以从二进制转十进制或者8进制转十进制推倒一下。
------解决方案--------------------
移位?
n*7 == n*(8-1) == n*8 - n == n<<3 - n
这样算不算移位运算?

Java code
public static int seven2ten(String src) {
    int num = 0;
    char[] c = src.toCharArray();
    for (int i=0; i<c.length; i++) {
        num = (num << 3) - num;  //也就是 num *= 7; 
        num += (c[i]-'0');
    }
    return num;
}

System.out.println(seven2ten("123"));