c语言怎么写输入数据有多组,每组输入一个正整数N?

Input输入数据有多组,每组输入一个正整数N(可用32位整型表示)。Output每组输出:若N是2的幂,输出1;否则输出0,占一行;SampleInput2102310... Input
输入数据有多组,每组输入一个正整数N(可用32位整型表示)。
Output
每组输出:若N是2的幂,输出1;否则输出0,占一行;
Sample Input
2
1023
1024
Sample Output
1
0
1
展开
 我来答
zhongying823
2013-09-20 · TA获得超过181个赞
知道小有建树答主
回答量:156
采纳率:50%
帮助的人:147万
展开全部
你可以先做一个预处理。例如说有一个a数组,a[n]为1表示n是2的幂,否则不是
那么你在初始化的时候a数组整个就是全为0的
然后
int p = 1;
for (int i=0; i<=31; ++i) //这里根据你要的数据量大小决定,这里是有符号的
{
a[p] = 1;
p <<= 1;
}

ok,预处理只做了32次赋值和32次位移而已。接下来对于任意输入的N,
你只要直接输出a[N]。这是O(1)的
所以我认为,这是很快的一种做法

//以上是算法方面的问题
我仔细看了你的提问之后我发现你的问题应该是在对输入数据的处理方面。推荐你做
杭电上所有的a+b problem还有输入输出处理的题目(1089~1096)
例如说这一题,你应该这样

int n;
scanf("%d", &n);
while ( n-- )
{
int N;
scanf("%d", &N); //这个才是被询问的数

....
}
金色潜鸟
2013-09-20 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5535万
展开全部
#include<stdio.h>
int main(){
int g,N;
int i;
scanf("%d",&g);
for (i=0;i<g;i++){
scanf("%d",&N);
while(N%2==0) N=N/2;
if (N==1) printf("1\n"); else printf("0\n");
}
return 0;
}
=================
你的输入输出例子有点问题。
2 应当是组数,输出 时 怎么 把 2 也作为 一个 数据 判断它是否是2 的幂了?
如果确实有此要求,你就把 g 也判断和输出一次。
追问
输入2是指有2组数据。每组里有一个数字。
追答
我问的是,输入2个数,为何输出有3个数:
Sample Output // 你的 输出样例
1 // 你把输入2 也作为数判断了,否则哪来的 1
0 // 对应 1023
1 // 对应 1024
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
IT孤鹜
2013-09-20 · TA获得超过4197个赞
知道大有可为答主
回答量:3960
采纳率:71%
帮助的人:3510万
展开全部
ACM题目吧,很简单

#include <stdio.h>
void main()
{
int N;
while (scanf("%d",&N)!=EOF)
{
while (N%2==0)
{
N/=2;
}
if(N==1) printf("1\n");
else
printf("0\n");
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
py102356
推荐于2018-03-13 · TA获得超过135个赞
知道小有建树答主
回答量:209
采纳率:0%
帮助的人:105万
展开全部
bool ans(int n)
{
while(n&&n%2==0)
n/=2;
if(n)return false;
return true;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小黄鸭de寿司
2013-09-20
知道答主
回答量:24
采纳率:0%
帮助的人:3.4万
展开全部
淡淡的的顶顶顶顶顶的顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式