我试着创建一个代码,在Java中接收整数并输出为二进制。问题似乎是二进制向后打印。例如,6
应该输出为011
,但输出为110
。
import java.util.Scanner;
public class LabProgram {
public static void main(String[] args) {
int userNum;
Scanner in =new Scanner(System. in );
userNum = in.nextInt();
binary(userNum);
System.out.print("\n");
}
private static void binary(int userNum) {
int remainder;
while (userNum <= 1) {
System.out.print(userNum);
return;
}
remainder = userNum % 2;
binary(userNum >> 1);
System.out.print(remainder);
}
}
我尝试合并一个推送堆栈,将剩余部分推送到一个可以稍后拉取的堆栈中,但无法使其完全到达。
private static void reverse(int userNum) {
String backwards;
while (userNum >= 0) {
backwards.push(int userNum);
System.out.println(backwards);
return;
}
}
这是课堂作业的一部分,课堂作业要求完成以下内容。
编写一个程序,输入一个正整数,输出一个由1和0组成的字符串,用二进制表示该整数。对于整数x,算法为:
As long as x is greater than 0
Output x % 2 (remainder is either 0 or 1)
x = x / 2
注:上述算法以相反顺序输出0和1。
例如:如果输入为:6
输出为:011
二进制的6
是110
;该算法反向输出比特。
这是程序的测试结果和我的测试结果。
输入6
您的输出binary is:110
预期输出011
输入19
您的输出10011
预期输出11001
输入255
您的输出11111111
预期输出11111111
在这方面的任何帮助或指导,我将不胜感激。
4条答案
按热度按时间cczfrluj1#
根据要求,不考虑负数
pqwbnv8z2#
首先使用预定义的方法,然后自定义一个。
vsdwdz233#
你的程序看起来可以很好地处理正值。但是它不能处理负数,因为负数有自己独特的二进制表示形式two's complement。你可以做一些类似下面的事情来适应:
印刷品
这些值按正确的顺序打印出来的原因是因为你的例程是递归的,这是一个自然的行为,从一个递归过程中打印存储在堆栈中的值。
t9aqgxwy4#
导入java.util.scanner;
公共类反向二进制数{