字符转整型会改变值的一个小问题
水仙花数问题
无聊的时候偶然想写一写代码,突然想到了水仙花数问题;
就是给一个三位数,例如123,是一个整型,如果三个位上的数进行立方和后得到的值等于这个数;
这个数就是一个水仙花数;
于是在纸上写了一个样本,回寝室后在电脑上打了出来;
思路
我的思路很简单啊,不是一个三位的整型嘛;
将它转型成字符串就可以遍历其中的每一位然后进行平方和,然后转回int型进行比较就行了;
for (int n = 100; n <= 999; n++) {
int sum = 0;
String str = "" + n;
for (int i = 0; i < str.length(); i++) {
int q = (int) str.charAt(i);
sum = sum + (int) Math.pow(q, 3);
}
if (sum == n) {
System.out.println(n + "是水仙花数");
}
}
问题
但是运行出来发现一个水仙花数都没有,就很奇怪,设了个断点
才发现,q从字符转整型值从’1’变成了49
根源
虽然字符可以转整型,但是字符型根本上来说也是一个数,是有编码的,所以转int的时候不是把值转出来,转出来的是对应的编码;
解决
所以我想到了int的封装类,如果我没记错的话,他好像是有个解析字符串的方法,虽然我这是字符,但是不分家嘛;
Integer.parseInt(String str);
将字符串str解析为int整型,并返回一个int值;
下面是完成的可运行代码:
for (int n = 100; n <= 999; n++) {
int sum = 0;
String str = "" + n;
for (int i = 0; i < str.length(); i++) {
int q = Integer.parseInt("" + str.charAt(i));
sum = sum + (int) Math.pow(q, 3);
}
if (sum == n) {
System.out.println(n + "是水仙花数");
}
}
运行结果: