在CSDN上回帖发现了一个问题,想了一下,有一个比较好的算法,给大家分享一下
判断一个整数是否全部由奇数组成
这个题目和判断一个数二进制数中1的个数方法差不多.
只要从最后一位数开始考虑,如果最后一位数是奇数,二进制数最后一位肯定为1,因为其它位都是2的倍数,所以就相当于考虑最后一位数是否为1,只要将这个数与1这个数进行与操作,如果结果是1则说明是奇数,如果是0就是偶数.然后将这个数除以10,就会去掉最后一位了,倒数第二位就是最后一位了,后面的方法同上,直到这个数为0.
#include<iostream>
using namespace std;
bool check(long a)
{
while(a)
{
if(!(a&1)) //判断最后一位是不是1
return 0;
a/=10;
}
return 1;
}
int main()
{
long a;
while(cin>>a,a!=0)
cout<<a<<" is "<<(check(a)?"OK":"ERROR")<<endl;
return 0;
}
参考地址:http://topic.csdn.net/u/20071116/17/76bac1a4-63a7-4b2b-938a-22a757756d34?seed=1436541807
[此贴子已经被作者于2007-11-18 11:37:57编辑过]
----------------解决方案--------------------------------------------------------
唉,发错地方了,哪位版主转到C区去
----------------解决方案--------------------------------------------------------
改个能处理大点的,上面的处理的数太小了
VC++6.0运行通过
[CODE]#include<stdio.h>
int check(__int64 a)
{
while(a)
{
if(!(a&1))
return 0;
a/=10;
}
return 1;
}
int main()
{
__int64 a;
while(scanf("%I64d",&a),a!=0)
printf("%I64d is %s\n",a,check(a)?"OK":"ERROR");
return 0;
}[/CODE]
----------------解决方案--------------------------------------------------------
楼主。我运行了,只能算两位数的呀,三位数都报错呀,
----------------解决方案--------------------------------------------------------
晕,发错了,汗,楼主好强呀
----------------解决方案--------------------------------------------------------
学习了
----------------解决方案--------------------------------------------------------