如何将一个正整数分解成2的幂次之和,用C或C++

来源:百度知道 编辑:UC知道 时间:2024/05/28 02:42:02
比如输入10
应输出8+2

#include<stdio.h>
int seperate(unsigned n , int value[]);
int main()
{
unsigned a;
int i,n;
int value[sizeof(unsigned)*8];

printf("Please input the integer:\n");
scanf("%u",&a);
n=seperate(a,value);
printf("%d=%d",a,value[0]);
for(i=1;i<n;++i)
printf("+%d",value[i]);
putchar('\n');
system("PAUSE");
return 0;
}

int seperate(unsigned n , int value[])/*该函数将n 分解为2的幂次的和,将非零结
果存在数组value中,并返回非0数的个数*/
{
int i,j=0,y;
int temp[sizeof(unsigned)*8];

for(i=0;i<sizeof(unsigned)*8;++i)
{
y=n;
y>>=1+i;
y<<=1+i;
temp[i]=n&(~y);
n=y;
}
for(i=0;i<sizeof(unsigned)*8;++i)
{
if(temp[i]==0)
;
else
value[j++]=temp[i];<