将一个十进制数分解成若干个2的整数次幂相加的形式,并且依次从不超过前一个数的最大2的n次幂数,直到2的0次方(2^0==1)。
例:
程序实现:
#include <iostream>
using namespace std;
int n, maxn, ans[114514];
int resolve(int remain)
{
if(remain == 1)
{
ans[0] = 1;
return 0;
}
if(remain == 0) return 0;
int i = 1, n = 2;
while(n * 2 <= remain)
{
i++;
n *= 2;
}
ans[i] = 1;
maxn = i>maxn?i:maxn;
return resolve(remain-n);
}
int main()
{
scanf("%d",&n);
resolve(n);
for(int i = maxn;i >= 0;i--)
printf("%d",ans[i]);
return 0;
}
运行结果:
注:此程序最高支持30位(1073741823)