概述
1、大家有没有想过一个这样的问题,我们一般使用正整数时,在程序中都会这样写 int a = 356 ,打印a就会得到356。如果给的是字符串的“356”,你如何得到数字的356呢?
解法一:在java中可以使用JDK给我们提供的API可以很方便的实现这一需求。
包装类Integer中有一个方法parseInt(),它提供了将字符串(十进制、八进制、16进制)转换成十进制数的功能。详细说明可以查看API文档。
如 int a = Integer.parseInt("356");----十进制的
int a = Integer.parseInt("53c015", 16);-----16进制的
解法二:如果说明不允许使用语言中的API,你该怎么做呢?
现在教大家一种简单的方法可以把二进制、八进制和十进制的字符串转换成十进制数(注意这里没说16进制,待会说明理由)。仔细看代码,大家就会知道是怎么做的!
八进制字符串转十进制:
public int numberTransform2(String str)
{
char[] strArray = str.toCharArray();
int num = 0;
for(int i = 0; i < strArray.length; i++)
{
num = num * 8 + ((int)(strArray[i] - '1') + 1);
}
return num;
}
十进制字符串转十进制
public int numberTransform2(String str)
{
char[] strArray = str.toCharArray();
int num = 0;
for(int i = 0; i < strArray.length; i++)
{
num = num * 10 + ((int)(strArray[i] - '1') + 1);
}
return num;
}
大家看到区别了吗?仔细想想,手工操作一遍就会明白什么意思!
刚才提到此方法不适用于16进制字符串转十进制,原因是在ASCii表中字母和数字不是连续的,为什么提到ASCii表呢?请看(int)(strArray[i] - '1') + 1这句话字符相减就要用到ASCii码。
2、在Excel2003中,用A表示第1列,B表示第2列。。。Z表示第26列,AA表示第27列,AB表示第28列。。。以此类推。请写出一个函数,输入用字母表示的列号编码,输出它是第几列。(好多公司考过这道题)
这道题其实就是26进制字符串转十进制的题,由于A到Z在ASCii中是连续的,所以可以用上面的方法,大家可以试试!
补充知识点:
在ASCII码中,我们要记住几个关键的字符!
0:48
A:65
a:97
(1)数字在前,大写字母其后,最后是小写字母。
(2)小写字母和大写字母差32。
最后
以上就是清秀香氛为你收集整理的进制转换—腾讯面试题的全部内容,希望文章能够帮你解决进制转换—腾讯面试题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复