假设 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+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#语法的答案!
for (int y=64;y>=0;y--)
{
if(a>= /*2的y次方,这个math里有现成的函数)*/)
{
a-=2的y次方;
if(a==0)
return true;
}
}return false;
返回的肯定是truefunction {
reutrn true;
}最快最简单 给分吧 :)
能写出具体且通用的吗?!
有没有看天平跟砝码
?
{
if ((a & number) != 0)
{
return true;
}
else
{
return false;
}
}
{
if(number>0)
return true;
else
return false;
}
{
return (a & number) ? true : false;
}
谢谢你参与,问题有个条件是不能重复!
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
{
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);
}
bool check(int number)
{
if(number>0)
return true;
else
return false;
}
可以拿分了。
如果是返回组合,才有得做,LS的:)
{
return (a & number) != 0;
}
{
while (num > 2)
{
if ((num & 0x1) == 1)
{
return false;
}
num >>= 1;
}
return true;
}看一下这个方法怎么样??