| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 917 人关注过本帖
标题:简单问题,菜鸟困惑,请教高手……
只看楼主 加入收藏
vs_inzaghi
Rank: 5Rank: 5
来 自:湖北
等 级:职业侠客
威 望:1
帖 子:303
专家分:364
注 册:2009-8-17
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:11 
简单问题,菜鸟困惑,请教高手……
题目是输入任意整数,问它是否是2的n次方,若不是,输出error,若是,求出n值;
我的程序如下,可以运行,但是无论输入什么都是输出error,请教高手何故?多谢……
#include<stdio.h>
void main()
{
 int y,n,result;
 long num;
 n=0;
 printf("please input the number\n");
 scanf("%d",&num);
 loop:y=num%2;                                *y为余数;
      if(num<=0)                              *如果输入负数或者0,输出error;
      printf("ERROR\n");
      else if(num==1)                         *如果输入1,则结果为0,因为1是2的0次方;
      {
       result=n;
       printf("the result is %d\n",result);
      }
      else if(y==1)                           *如果输入的数不能被2整除,也输出error;
      printf("ERROR\n");
      else if(num/2==1)                       *如果当num为2的时候,次方数为当前n值+1;
      {
       n++;
       result=n;
       printf("the result is %d\n",result);
      }
      else
      {
       num=num/2;
       n++;
       goto loop;
      }
 }
搜索更多相关主题的帖子: 简单问题 困惑 
2010-05-12 00:36
skyhe1a
Rank: 2
等 级:论坛游民
帖 子:55
专家分:62
注 册:2010-4-10
收藏
得分:2 
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
我写得好简单

#include <stdio.h>
main()
{
int a,b=2 ,i;
scanf("%d",&a);
for(i=2;i<a;i++)
   { b=b*2;
    if(b==a)
    printf("%d",i);}
     if(b>a)
     printf("error");

    getch();
}
2010-05-12 00:56
skyhe1a
Rank: 2
等 级:论坛游民
帖 子:55
专家分:62
注 册:2010-4-10
收藏
得分:1 
改了一点执行性好点
#include <stdio.h>
main()
{
int a,b=2 ,i;
scanf("%d",&a);
for(i=2;i<a/2;i++)
   { b=b*2;
    if(b==a)
    printf("%d",i);}
     if(b!=a)
     printf("error");

    getch();
}
2010-05-12 01:04
wentao31
Rank: 1
等 级:新手上路
帖 子:2
专家分:3
注 册:2010-1-7
收藏
得分:2 
#include "stdio.h"
#include "stdlib.h"

int main()
{
    int n=0,m,index=1,tem;
    printf("input a number:\n");
    scanf("%d",&m);
    tem=m;
    if (m<=0)
    {
        printf("Error!\n");
        exit(1);
    }
    else
    {
        while(m>1)
        {
            if(m%2!=0)
            {
                index=0;
                break;
            }
            else
            {
                n++;
            }
            m=m/2;
        }
    }
    if (index)
    {
        printf("%d是2的%d次方.\n",tem,n);
    }
    else
        printf("Error!\n");
    return 0;
}
2010-05-12 01:21
wentao31
Rank: 1
等 级:新手上路
帖 子:2
专家分:3
注 册:2010-1-7
收藏
得分:1 
建议使用标准格式,养成定义标志量的习惯标志量在程序中作用相当强大
2010-05-12 01:27
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:1 
二楼的代码有问题。
我也写一个供楼主参考。
请各位多多指教!
程序代码:
#include<stdio.h>

int main()
{
    int n,i=0,j=1;
    printf("请输入一个正整数:");
    scanf("%d",&n);
    if(n==1)
    {
        printf("0\n");
        return 1;
    }
    else
    {
        while(j<n){
       
            i++;
            j*=2;
            if(j==n)
            {
                printf("%d\n",i);
                return 1;
            }
        }
    }
   
    printf("error!\n");
    return 0;
}



南国利剑
2010-05-12 01:38
liyang0430
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:98
专家分:159
注 册:2009-6-9
收藏
得分:1 
楼主的代码好乱!if else语句用错!
2010-05-12 08:38
deargod007
该用户已被删除
收藏
得分:2 
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-12 10:02
vs_inzaghi
Rank: 5Rank: 5
来 自:湖北
等 级:职业侠客
威 望:1
帖 子:303
专家分:364
注 册:2009-8-17
收藏
得分:0 
汗!用心的写一个居然错了……多下大家指点,我也自己找到原因了,
 else if(y==1)                           *如果输入的数不能被2整除,也输出error;
      printf("ERROR\n");
任何数像我设计的那样除下去y总有等于1的时候,所以总是输出error了……
多谢大家指点,我都看了一遍,感觉8楼的比较简单点……呵呵,个人意见……

我很懒,但我讨厌别人说我懒……
2010-05-12 17:14
vs_inzaghi
Rank: 5Rank: 5
来 自:湖北
等 级:职业侠客
威 望:1
帖 子:303
专家分:364
注 册:2009-8-17
收藏
得分:0 
不好意思,分不多……随便给点……表点心意……多谢……

我很懒,但我讨厌别人说我懒……
2010-05-12 17:16
快速回复:简单问题,菜鸟困惑,请教高手……
数据加载中...
 
   



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

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