假设 a = 5;
可以分解成1+4 必须是2的N次方组成的数字.但不可以用重复的2的N次方数表示,例如:5 = 1 + 4 (正确),5=1+2+2(错误,2重复)下面这个函数,要求输入一个2的N次方的数,返回是否是组成a的2的N次方数字?!
(已知在使用这个函数前,a的值已经确定)
bool check(int number)
{
     return true?false?;
}求最快,最简单,最好是是C#语法的答案!

解决方案 »

  1.   

    假设从2的64次方开始原始数字是a
    for (int y=64;y>=0;y--)
    {
        if(a>= /*2的y次方,这个math里有现成的函数)*/)
        {
            a-=2的y次方;
            if(a==0)
                return true;
        }
    }return false;
      

  2.   

    所以返回true跟false根本没任何意义
    返回的肯定是truefunction {
    reutrn true;
    }最快最简单 给分吧 :)
      

  3.   

    Macosx() ( ) 的思路简单直接 这个最好
      

  4.   

    Macosx() 
    能写出具体且通用的吗?!
      

  5.   

    最快return true;所有数字都可以用1 2 4 8 16组成
    有没有看天平跟砝码
      

  6.   

    static bool check(int a,int number)
            {
                if ((a & number) != 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
      

  7.   

    bool check(int number)
    {
      if(number>0)
    return true;
    else 
    return false;
    }
      

  8.   

    static bool check(int a, int number)
    {
    return (a & number) ? true : false;
    }
      

  9.   

    ufoteam
    谢谢你参与,问题有个条件是不能重复!
      

  10.   

    不就是二进制吗?
    f(0)=0
    f(1)=1
    f(2)=2
    f(3)=1+2
    f(4)=4
    f(5)=1+4
    f(6)=2+4
    f(7)=1+2+4
    f(8)=8
    f(9)=1+8
    f(10)=2+8
    f(11)=1+2+8
    f(12)=4+8
    f(13)=1+4+8
    f(14)=2+4+8
    f(15)=1+2+4+8
    f(16)=16
    f(17)=1+16
    f(18)=2+16
    f(19)=1+2+16
    f(20)=4+16
    f(21)=1+4+16
    f(22)=2+4+16
    f(23)=1+2+4+16
    f(24)=8+16
    f(25)=1+8+16
    f(26)=2+8+16
    f(27)=1+2+8+16
    f(28)=4+8+16
    f(29)=1+4+8+16
    f(30)=2+4+8+16
    f(31)=1+2+4+8+16
    f(32)=32
    f(33)=1+32
    f(34)=2+32
    f(35)=1+2+32
    f(36)=4+32
    f(37)=1+4+32
    f(38)=2+4+32
    f(39)=1+2+4+32
    f(40)=8+32
    f(41)=1+8+32
    f(42)=2+8+32
    f(43)=1+2+8+32
    f(44)=4+8+32
    f(45)=1+4+8+32
    f(46)=2+4+8+32
    f(47)=1+2+4+8+32
    f(48)=16+32
    f(49)=1+16+32
    f(50)=2+16+32
    f(51)=1+2+16+32
    f(52)=4+16+32
    f(53)=1+4+16+32
    f(54)=2+4+16+32
    f(55)=1+2+4+16+32
    f(56)=8+16+32
    f(57)=1+8+16+32
    f(58)=2+8+16+32
    f(59)=1+2+8+16+32
    f(60)=4+8+16+32
    f(61)=1+4+8+16+32
    f(62)=2+4+8+16+32
    f(63)=1+2+4+8+16+32
    f(64)=64
    f(65)=1+64
    f(66)=2+64
    f(67)=1+2+64
    f(68)=4+64
    f(69)=1+4+64
    f(70)=2+4+64
    f(71)=1+2+4+64
    f(72)=8+64
    f(73)=1+8+64
    f(74)=2+8+64
    f(75)=1+2+8+64
    f(76)=4+8+64
    f(77)=1+4+8+64
    f(78)=2+4+8+64
    f(79)=1+2+4+8+64
    f(80)=16+64
    f(81)=1+16+64
    f(82)=2+16+64
    f(83)=1+2+16+64
    f(84)=4+16+64
    f(85)=1+4+16+64
    f(86)=2+4+16+64
    f(87)=1+2+4+16+64
    f(88)=8+16+64
    f(89)=1+8+16+64
    f(90)=2+8+16+64
    f(91)=1+2+8+16+64
    f(92)=4+8+16+64
    f(93)=1+4+8+16+64
    f(94)=2+4+8+16+64
    f(95)=1+2+4+8+16+64
    f(96)=32+64
    f(97)=1+32+64
    f(98)=2+32+64
    f(99)=1+2+32+64
      

  11.   

    private string Calc(uint ANumber)
    {
        if (ANumber == 0) return "0";
        string Result = "";
        for (int i = 0; i < 32; i++)
            if ((ANumber & (1 << i)) == (1 << i))
                Result += "+" + (1 << i).ToString();
        return Result.Substring(1);
    }
      

  12.   

    return (a & number) > 0 ;
      

  13.   

    如果只是返回true跟false,
    bool check(int number)
    {
    if(number>0)
    return true;
    else
    return false;
    }
    可以拿分了。
    如果是返回组合,才有得做,LS的:)
      

  14.   

    巨汗,如果number一定是2的自然数次方,则:public bool Check ( int number )
    {
      return (a & number) != 0;
    }
      

  15.   

    我第一次给不太懂规矩,Macosx()最快给出的答案,谢谢各位热心参与!
      

  16.   

    private bool isNf(int num)
            {
                while (num > 2)
                {
                    if ((num & 0x1) == 1)
                    {
                        return false;
                    }
                    num >>= 1;
                }
                return true;
            }看一下这个方法怎么样??
      

  17.   

    这个肯定,只要输入的地是正整数地话, 肯定返回地是true, 因为任何一个正整数都能由二进制表示.~~ 而任何一个二进制表示的的十进制大小~~