我的代码有什么问题。 它为任何输入值打印1。
package Assign;
import java.util.Scanner;
import java.lang.*;
public class Assignment {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int num = s.nextInt();
int x = 1;
int sum = 1, i = 0;
while (num > 0) {
x = num % 10;
if (x == 1) {
sum = sum + (2 * i);
}
num = num / 10;
i++;
}
System.out.println(sum);
}
}
答案 0 :(得分:0)
两个问题:
1)您需要将2 ^ i添加到sum,而不是2 * i
2)总和从1开始而不是0,这意味着答案总是比应有的多1个。
答案 1 :(得分:0)
如果您不需要自己开发算法,可以采用较短的方法:
System.out.println(new BigInteger(String.valueOf(num), 2));
答案 2 :(得分:0)
一种简单的方法。
System.out.println(Integer.parseInt(binaryString,2));
答案 3 :(得分:0)
在程序中,当 (num> 0) 在if块中时,变量sum被修改的唯一情况。 考虑if块
if (x == 1) {
sum = sum + (2 * i);
}
因为变量 i = 0 。
sum = sum + (2 * i);
评估为
sum = sum + (2 * 0);
sum = sum + 0;
sum = sum;
由于变量 sum = 1 ,输出始终为1.
考虑到另一种可能性,当 (num <= 0) 时跳过while循环,因为 sum = 1 ,输出为1.
对于Java中的Binary to Decimal数字转换器,请查看
http://www.java2novice.com/java-interview-programs/binary-to-decimal/