时间限制: 1Sec 内存限制: 128MB
题目描述:(原题链接)
A市的工人们天天抱着脑袋,因为食品生产线上,他们用0和1来表示是否添加原料,而原料的种类,总计多达20种……
更头疼的是,电路板上的数位,对于工人来说是一个不小的难题。电路板上的LED屏幕总是把0和1的数据,转化成一个十进制的数,于是每次,工人们就会天天计算12039这种数字的二进制位,这让工人们很头疼。
对于一个数字x(0<x<1000000),我们想要将它化成简单二进制数相加的形式,7=4+2+1,43=32+8+2+1,这样的一个小工具对于在电路板上头疼的工人来说好像非常有用,因为他们在之前的头疼训练中已经背会了2从0到20的乘方……
输入:
一个数字x,表示LED屏幕的数字
样例输入:
43
输出:
一个等式,x=Ei+Ej+Ek+…+E0,其中,Ei,Ej,Ek….是从大到小的2的乘方
样例输出 :
43=32+8+2+1
解题思路:
整数转化为2进制串,遍历每个字符,若为1 则执行乘方操作,连接该结果串
注意事项:
注意格式
参考代码:
import java.util.Scanner;
public class Main {
public static void main(String []args) {
Scanner in =new Scanner(System.in);
int x =in.nextInt();
String tmp = Integer.toBinaryString(x),res = x+"=";
for(int i=0;i<tmp.length();i++) {
if(tmp.charAt(i)=='1') {
res=res+(int)Math.pow(2, (tmp.length()-1-i))+"+"; //字符串的连接
}
}
System.out.println(res.substring(0, res.length()-1));
in.close();
}
}