怎么样正整数分解成2的n次方的和?

dongyi940333 2006-10-16 08:14:32
任意一个正整数,都可以分解成2的n次方的和(不知道数学上的叫法是什么?)
如:
func(1) = 2的0次
func(2) = 2的1次
func(3) = 2的1次+2的0次
func(65) = 2的6次+2的0次
请问各位这个算法的具体实现?谢谢

...全文
1320 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
williamwhy 2006-10-27
  • 打赏
  • 举报
回复
怎么是十进制和2进制的转化
phidix 2006-10-25
  • 打赏
  • 举报
回复
大概就这样
func(int n)
{
int mask=1;
int temp=0;
int i=0;
while(n>0)
{
printf("%d=%d*2^%d",n,n&mask,i);
n>>1;
i++;
}
return;
}
39457760 2006-10-19
  • 打赏
  • 举报
回复
估计楼主是头一回碰到这样的问题
jxhlyy_3616 2006-10-18
  • 打赏
  • 举报
回复
将10进制数转化为2进制数你应该会吧。
jxhlyy_3616 2006-10-18
  • 打赏
  • 举报
回复
上面的改一下:

{先将10进制数转化为2进制的数。如:65=1000001。然后输出+1*2^6+0*2^5+0*2^4+0*2^3+0*2^2+0*2^1+1*2^0。
这样就可以转化了}
jxhlyy_3616 2006-10-18
  • 打赏
  • 举报
回复
先将10进制数转化为2进制的数。如:65=01000001。然后输出0*2^7+1*2^6+0*2^5+0*2^4+0*2^3+0*2^2+0*2^1+1*2^0。
这样就可以转化了。
yelling 2006-10-17
  • 打赏
  • 举报
回复
直接读每一个BIT好了
csucj 2006-10-17
  • 打赏
  • 举报
回复
up!
mu_yang 2006-10-17
  • 打赏
  • 举报
回复
HUNTON(追求完美) :
大意了.
你对!谢谢指正!
HUNTON 2006-10-17
  • 打赏
  • 举报
回复
mu_yang(穆扬)说的不对吧,“m(m为任意整数)的n次方的和”这里的m(m为任意整数)的n次方是有系数(小于m)的,不是就和而已。
captain_x 2006-10-17
  • 打赏
  • 举报
回复
数论
WizardOz 2006-10-17
  • 打赏
  • 举报
回复
跟把它转换成二进制一样的意思
除二取余
mu_yang 2006-10-16
  • 打赏
  • 举报
回复
任意一个正整数,都可以分解成2的n次方的和(不知道数学上的叫法是什么?)
----------------------------------------
不就是二进制吗

我还可以告诉你
任意一个正整数,都可以分解成m(m为任意整数)的n次方的和,最多再加上一个小于m的数
def000 2006-10-16
  • 打赏
  • 举报
回复
反复的除以2,记录余数,直到被除数为零中止。比如13

第1次 13/2 = 6 余 1 => 13 = 2*6 + 1
第2次 6/2 = 3 余 0 => 13 = 2*(2*3 + 0) + 1
第3次 3/2 = 1 余 1 => 13 = 2*(2*(2*1 + 1) +0) + 1
第4次 1/2 = 0 余 1 => 13 = 2*(2*(2*(0*2 + 1) + 1) + 0) + 1

最后,第i次的余数就是2^(i-1)项的系数:
13 = 1*2^0 + 0*2^1 + 1*2^2 + 1*2^3
Leaveye 2006-10-16
  • 打赏
  • 举报
回复
计算机里存储数字都是一个个的 bit ,你的问题只是在问,这些 bits 都是几而已。
在 C/C++ 里,可以直接用移位运算(“<<”/“>>”)。

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧