为啥这个程序不能判断2的n次幂呢???
#include <stdio.h>#include <stdlib.h>
int main()
{
int a, b, c, d;
scanf("%d", &a);
while(-9999999999 <= a && a <= 9999999999)
{
if(a % 2 == 0)
printf("YES");
else
printf("NO");
break;
}
return 0;
}
当我输入100662788时本应该是no的,可结果却为YES 本帖最后由 jhq999 于 2021-11-8 22:41 编辑
int main()
{
int a, b, c, d;
scanf("%d", &a);
b=0;
c=a;
d=0;
if (a<0)//负数=
{
a=~a+1;
}
while(a)
{
b+=a&1;
if(b==0)d++;
if(b>1)break;
a>>=1;
}
if(b==1)
printf("YES,是2的%d次幂",d);
else
printf("NO");
return 0;
} 本帖最后由 jackz007 于 2021-11-8 22:31 编辑
2 的 n 次幂是这样判定的吗?
#include <stdio.h>
bool foo(long long n)
{
if(n == 1LL || n == -1LL) return true ;
else if(n % 2LL) return false ;
else return foo(n / 2LL) ;
}
int main(void)
{
long long n ;
scanf("%I64d" , & n) ;
if(foo(n)) printf("Yes\n") ;
else printf("No\n") ;
}
编译、运行实况;
D:\00.Excise\C>g++ -o x x.c
D:\00.Excise\C>x
8
Yes
D:\00.Excise\C>x
6
No
D:\00.Excise\C>x
16
Yes
D:\00.Excise\C>x
32
Yes
D:\00.Excise\C>x
30
No
D:\00.Excise\C> jhq999 发表于 2021-11-8 21:58
谢谢,那请问如果输入的是-165587175的话,这代码要如何改呢 jackz007 发表于 2021-11-8 22:20
2 的 n 次幂是这样判定的吗?
编译、运行实况;
可以试试更大的数吗,还有负数,我是初学者,对此还不够了解 J爱学习 发表于 2021-11-8 22:26
可以试试更大的数吗,还有负数,我是初学者,对此还不够了解
当然,3楼的代码你编译运行测试一下呢。 jackz007 发表于 2021-11-8 22:29
当然,3楼的代码你编译运行测试一下呢。
嗯嗯,我刚刚试过了,输入正数没有问题,可输入负数就无法运行了 J爱学习 发表于 2021-11-8 22:31
嗯嗯,我刚刚试过了,输入正数没有问题,可输入负数就无法运行了
3 楼的代码针对负数和64位整数做了修改,现在再测。 jhq999 发表于 2021-11-8 21:58
非常感谢 jackz007 发表于 2021-11-8 22:33
3 楼的代码针对负数和64位整数做了修改,现在再测。
嗯嗯,谢谢前辈提醒 J爱学习 发表于 2021-11-8 22:26
可以试试更大的数吗,还有负数,我是初学者,对此还不够了解
//负数在前面加上
if (a<0)
{
a=~a+1;
}
页:
[1]