看这样行不行
book isok = true;
for(int i=0;isok;i++)
{
    int x = 0;
    for(int ii=0;ii<=i;ii++)
        x += 2^ii;//不知道次方是不是这么写的:)
    if(n==x)
        isok = false;
    if(n<x)
        faint;
}
.....

解决方案 »

  1.   

    ft,  C#里面^是异或操作符!!等会儿我写一个……
      

  2.   

    就是把n变成二进制数啊
    不断的除2取余
    i=0;
    while(n) a[i++]=n%2,n/=2;a[0]表示是否存在2^0
    a[1]表示是否存在2^1
    .
    .
    .
      

  3.   

    int x;
    int i;x = 7; // 你想要拆分的数字。
    i = 1;while (x != 0)
    {
      if ((x & i) != 0)
      {
        MessageBox.Show(i.ToString());
        x &= ~i;
      }
      i <<= 1;
    }
      

  4.   

    注意,那个 x &= ~i; 不是 -i,是左上角的那个需要按着SHIFT键的波浪符号,表示取反(VB的Not)。
      

  5.   

    我用C++写了一个,我已经调试通过了,你看看符合不符合你的意思:)#include <iostream.h>
    #include <math.h>void main()
    {
    int num; //&Oacute;&Eacute;&Oacute;&Atilde;&raquo;§&Ecirc;&auml;&Egrave;&euml;&Ograve;&raquo;&cedil;&ouml;&Otilde;&ucirc;&Ecirc;&yacute;&pound;&not;&frac12;&oslash;&ETH;&ETH;·&Ouml;&frac12;&acirc;
    cout<<"please input a integer:";
    cin>>num; //&Iuml;&Egrave;&Aring;&ETH;&para;&Iuml;&frac12;&laquo;&Ograve;&ordf;×&ordf;&raquo;&raquo;&para;&oslash;&Agrave;&acute;&micro;&Auml;&para;&thorn;&frac12;&oslash;&Ouml;&AElig;&Ecirc;&yacute;&micro;&Auml;&sup3;¤&para;&Egrave;
    int pw = 0;
    while(1)
    {
    if(pow(2,pw) > num)
    break;
    pw++;
    }

    //&cedil;ù&frac34;&Yacute;&Otilde;&acirc;&cedil;&ouml;&sup3;¤&para;&Egrave;&Eacute;ê&Ccedil;&euml;&Ograve;&raquo;&cedil;&ouml;&Ecirc;&yacute;×é&pound;&not;&Oacute;&Atilde;&Oacute;&Uacute;&acute;&aelig;&acute;&cent;×&ordf;&raquo;&raquo;&para;&oslash;&Agrave;&acute;&micro;&Auml;&para;&thorn;&frac12;&oslash;&Ouml;&AElig;&Ecirc;&yacute;
    int* binaryNumber = new int[pw];
    for(int i = pw - 1; i >= 0; i--)
    {
    binaryNumber[i] = num%2;
    num = (int)num/2;
    }

    //&Ecirc;&auml;&sup3;&ouml;&frac12;á&sup1;&ucirc;
    cout<<"The result is:"<<num<<"=";
    for(i = 0; i < pw - 1; i++)
    {
    cout<<binaryNumber[i]<<" * 2^"<<pw - i - 1<<" + ";
    }
    cout<<binaryNumber[pw - 1]<<"* 2^0"<<endl;
    }
      

  6.   

    居然有乱码,再帖一次#include <iostream.h>
    #include <math.h>void main()
    {
    int num; //由用户输入一个整数,准备分解
    cout<<"please input a integer:";
    cin>>num; //先判断将要转换而来的二进制数的长度
    int pw = 0;
    while(1)
    {
    if(pow(2,pw) > num)
    break;
    pw++;
    }

    //根据这个长度申请一个数组,存储转换而来的二进制数
    int* binaryNumber = new int[pw];
    for(int i = pw - 1; i >= 0; i--)
    {
    binaryNumber[i] = num%2;
    num = (int)num/2;
    }

    //输出结果
    cout<<"The result is:"<<num<<"=";
    for(i = 0; i < pw - 1; i++)
    {
    cout<<binaryNumber[i]<<" * 2^"<<pw - i - 1<<" + ";
    }
    cout<<binaryNumber[pw - 1]<<"* 2^0"<<endl;
    }