例如:
2 ^ 15 = 32768,其位数之和为3 + 2 + 7 + 6 + 8 = 26
但是我没有得到想要的结果
当我添加它给出的所有字符时 输出为: 266
import java.util.Scanner;
public class ProjectEu {
public static void main(String...rDX) {
int degree = new Scanner(System.in).nextInt();
String store = Integer.toString((int)Math.pow(2,degree));
char [] finals = store.toCharArray();
int temp = 0;
for (int i = 0, n = store.length(); i < n; i++) {
System.out.printf("values[%d] --> %c \n",i, finals[i]);
temp = temp + finals[i];
}
System.out.println(temp);
}
}
答案 0 :(得分:1)
出现此错误的原因是因为temp
是一个整数,但是finals[i]
是一个字符,因此它将字符转换为ASCII值并相加。您可以通过以下方法解决此问题:
for (int i = 0, n = store.length(); i < n; i++) {
char ch = store.charAt(i);
int digit = Integer.parseInt(Character.toString(ch));
temp = temp + digits;
}
答案 1 :(得分:0)
此行:
temp = temp + finals[i];
求和temp
和存储在finals[i]
中的char的 ASCII码。
您可以通过以下方式获得数字的值:
temp = temp + finals[i] - '0';
这意味着通过从数字的ASCII码中减去0
的ASCII码,您可以获得数字的数值。
答案 2 :(得分:0)
在将字符添加到整数时,是在添加字符的整数 code ,而不是其实际数值。
您需要的是Character.getNumericValue
:
temp = temp + Character.getNumericValue(finals[i]);
答案 3 :(得分:0)
尝试一下:
int sum = store.chars()
.boxed()
.map(Character::getNumericValue)
.mapToInt(Integer::intValue)
.sum();