题目描述
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屏幕的数字
1
输出
一个等式,x=Ei+Ej+Ek+…+E0,其中,Ei,Ej,Ek….是从大到小的2的乘方
1
样例输入
43
1
样例输出
43=32+8+2+1
1
code
//除2取余法,二进制各位数相加
//输入10进制数,输出十进制数=2进制的十进制数相加(从大到小)
//eg input: 43
// output:43=32+8+2+1
#include<iostream>
#include<cstdio>
using namespace std;
int a[25],Anx=0;
int main()
{
int ans=0,n,num,i;
int temp;
cin>>n;
num=n;
temp=1;
while(n>0){
if(n%2==1){
Anx++;
a[Anx]=temp;
}
n/=2;
temp*=2;
}
cout<<num<<'=';
for(i=Anx;i>=2;i--){
cout<<a[i]<<'+';
}
cout<<a[1]<<endl;
return 0;
}
原文链接:https://blog.csdn.net/qq_42403069/article/details/99441486