论坛首页 招聘求职论坛

怀具,面试亡在简单的API上

浏览 10982 次
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-10-14  
楼主,怀具
0 请登录后投票
   发表时间:2010-10-14  
yangyw 写道
或许人家是想考你进制转换之间的位运算,而不是要考你API!

就是要考你API的,它要你写出具体的程序,当然算法也行,但给出的位置只有二行大小。明显是填上API就算。
而且面试时有提示我是用JAVA的API来,我说不清楚哪个,用到时在查文档。
我说有些东西不用记,只要知道怎么做就好。那他就说,那有什么要记的。
0 请登录后投票
   发表时间:2010-10-14  
写了一个比较简单的实现:
	public static String toString(long num, int radix) {
		StringBuilder result = new StringBuilder();
		while(true) {
			long remainder = num % radix;
			result.append(toHexLetter(remainder));
			num = num / radix;
			if(num == 0) {
				break;
			}
		}
		
		return result.reverse().toString();
	}
	
	private static String toHexLetter(long num) {
		if(num < 10)
			return num + "";
		
		String letter = "";
		if(num == 10) letter = "a";
		else if(num == 11) letter = "b";
		else if(num == 12) letter = "c";
		else if(num == 13) letter = "d";
		else if(num == 14) letter = "e";
		else if(num == 15) letter = "f";
		
		return letter;
	}

如果不是16进制需要转字母,代码就很简单了。
0 请登录后投票
   发表时间:2010-10-14  
看了API源码,Integer的。
public static final int   MIN_VALUE = 0x80000000;

public static final int   MAX_VALUE = 0x7fffffff;

public static final Class<Integer> TYPE = (Class<Integer>) Class.getPrimitiveClass("int");
final static char[] digits = {
'0' , '1' , '2' , '3' , '4' , '5' ,
'6' , '7' , '8' , '9' , 'a' , 'b' ,
'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,
'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,
'o' , 'p' , 'q' , 'r' , 's' , 't' ,
'u' , 'v' , 'w' , 'x' , 'y' , 'z'
    };
public static String toString(int i, int radix) {

        if (radix < 2 || radix > 36)
    radix = 10;

/* Use the faster version */
if (radix == 10) {
    return toString(i);
}

char buf[] = new char[33];
boolean negative = (i < 0);
int charPos = 32;

if (!negative) {
    i = -i;
}

while (i <= -radix) {
    buf[charPos--] = digits[-(i % radix)];
    i = i / radix;
}
buf[charPos] = digits[-i];

if (negative) {
    buf[--charPos] = '-';
}

return new String(buf, charPos, (33 - charPos));
    }
public static String toString(int i) {
        if (i == Integer.MIN_VALUE)
            return "-2147483648";
        int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i);
        char[] buf = new char[size];
        getChars(i, size, buf);
        return new String(0, size, buf);
    }
0 请登录后投票
   发表时间:2010-10-14  
toBinaryString()、toHexString()、 toOctalString() 都有好不
0 请登录后投票
   发表时间:2010-10-14   最后修改:2010-10-14
Python实现
chars =  [chr(ord('0') +  c) for c in range(10)] + [chr(ord('A') +  c) for c in range(6)]
tohex = lambda num, str = '' : num == 0 and ('0x' + str) or tohex(num >> 4, chars[num & 0xf] + str)
print tohex(0x100cdef)

chars =  ['0', '1']
tobin = lambda num, str = '' : num == 0 and str or tobin(num >> 1, chars[num & 1] + str)
print tobin(0x100cdef)

chars =  [chr(ord('0') +  c) for c in range(8)]
tooct = lambda num, str = '' : num == 0 and str or tooct(num >> 2, chars[num & 7] + str)
print tooct(0x100cdef)


0 请登录后投票
   发表时间:2010-10-15  
面试官的目的不是你怎么使用方法,而是你自己写个转换的功能吧,自己写也很简单啊
0 请登录后投票
   发表时间:2010-10-15  
比如System.out.print()能不能当成void来用

就像new Object()  能不能当Object来用,两个不同的概念
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics