最近在准备研究生的复试,在九度上刷题,博主是考得北邮研究生,水平比较菜,算法基本不咋样,随便写写自己敲代码过程中出现的各种情况和未解的问题。
part1:思路
十进制转换为二进制,无非是除二取余,然后将余数倒着输出。为了确定输出二进制的位数,对输入的数据取对+1,得出需要除以2的次数,也就是余数的位数,即二进制的位数。
得出二进制的位数之后,显然好做很多,用循环将除二取余的数输入数据,再用循环输出即可。
part2:代码
import java.util.Scanner; public class by20120101 { public static void main(String[] args) { System.out.println("input n:"); int n; Scanner cin = new Scanner(System.in); n=cin.nextInt(); int numbers [] = new int [n]; //输入n个元素 for (int i=0;i<n;i++) { numbers[i]=cin.nextInt(); } for (int i=0;i<n;i++) { change(numbers[i]); System.out.println(); } } //转为二进制算法 public static void change(int a) { int c=(int)(Math.log(a)/Math.log(2)+1); int[] numbers =new int [c];//存二进制的数组 //算法主体 for(int i=c;i>0;i--) { numbers[i-1]=a%2; a=a/2; } for(int j=0;j<c;j++) { System.out.print(numbers[j]); } } }
part3:总结
这个程序能在eclipse中跑,但是提交九度oj后,却显示的Runtime error,我也不清楚哪里出错了,但是觉得方法还是不太好,应该可以改进,尽量不要算出二进制数的位数。希望有高手看到这篇文章,能够提供些帮助,多谢!
时间: 2024-10-19 09:37:00