| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1200 人关注过本帖
标题:根据输入的数是否为2的n次方,打印出yes 或no
只看楼主 加入收藏
huangapple
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:545
专家分:1790
注 册:2010-12-30
收藏
得分:0 
回复 9楼 『点点滴滴』
没,我的算法很差的,而且我是匆忙写的,有很多漏洞,我后来玩的时候有发现,我还没去改,而且有很多地方犯了很低级的浪费。。。
我只是试试能不能写出来,还没优化。。

你算法好强,,我要向你学习了

勤能补拙,熟能生巧!
2011-03-01 21:37
劣质数轴
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:89
专家分:163
注 册:2010-11-19
收藏
得分:3 
以下是引用『点点滴滴』在2011-3-1 20:29:16的发言:

#include <stdio.h>
int main()
{
    int x ;
    while( ( scanf("%d" , &x ) ) == 1 )
    {
        if( ( x & ( x - 1 ) ) == 0 )
            printf("Yes\n" ) ;
        else
            printf("No\n" ) ;
    }
    return 0 ;
}

这个算法好强大……太牛X了!
2011-03-01 22:00
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:3 
笨人菜鸟, 按照3楼老师的思路, 写了一个, 请大家指点

root@~ #cat 2.c
程序代码:
#include <stdio.h>

int main (void) {

        int n,i,j=0,a[64];
        scanf ("%i",&n);
//先把输入的数字以二进制的形式存入数组a
        do {
                a[i]=n%2;
                n/=2;
                i++;
        }while(n!=0);
//遍历数组,找出位等于1的个数
        for(i--;i>=0;i--) {
                if(a[i]==1) {
                        j++;
                }
        }
//如果二进制位只有一个为1,则是2的N次幂
//否则,就不是。
        if(j==1) {
                printf ("Yes!\n");
        }else{
                printf ("No!\n");
        }
//返回OS
        return 0;

}

root@~ #
测试:
root@~ #./2
1
Yes!
root@~ #./2
2
Yes!
root@~ #./2
3
No!
root@~ #./2
17
No!
root@~ #./2
16
Yes!
root@~ #./2
1024
Yes!
root@~ #./2
8192
Yes!
root@~ #./2
512
Yes!
root@~ #./2
127
No!
root@~ #./2
128
Yes!
root@~ #
优化了一下。^_^
程序代码:
root@~ #cd prog
root@~/prog #cat is2.c
#include <stdio.h>

int main (void) {

        int n,i,j=0;
        scanf ("%i",&n);
        do {
                if(n%2==1) {
                        j++;
                }
                if(j>1) {
                        printf ("No!\n");
                        return ;
                }
                n/=2;
                i++;
        }while(n!=0);

        printf ("Yes!\n");

        return 0;

}
root@~/prog #


[ 本帖最后由 ansic 于 2011-3-1 22:38 编辑 ]

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-03-01 22:12
闭眼到天黑
Rank: 2
等 级:论坛游民
帖 子:37
专家分:15
注 册:2011-2-20
收藏
得分:3 
以下是引用『点点滴滴』在2011-3-1 20:29:16的发言:

#include
int main()
{
    int x ;
    while( ( scanf("%d" , &x ) ) == 1 )
    {
        if( ( x & ( x - 1 ) ) == 0 )
            printf("Yes\n" ) ;
        else
            printf("No\n" ) ;
    }
    return 0 ;
}
学习了十分强大!

淫荡成就梦想,猥琐引领时尚!
2011-03-01 22:13
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:3 
这是个名题。据说是什么公司的一个面试题。标答就是 x & (x-1)。

相当精巧,一般人应该是很难想到的。我当年也不会,当时还有人用这题讽刺过 wx 神牛呢。
2011-03-01 22:37
快速回复:根据输入的数是否为2的n次方,打印出yes 或no
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020953 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved