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

Input
输入数据有多组,每组输入一个正整数N(可用32位整型表示)。
Output
每组输出:若N是2的幂,输出1;否则输出0,占一行;
Sample Input
2
1023
1024
Sample Output
1
0
1

你可以先做一个预处理。例如说有一个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); //这个才是被询问的数

....
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-20
#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

本回答被提问者和网友采纳
第2个回答  2013-09-20
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");
}
}
第3个回答  推荐于2018-03-13
bool ans(int n)
{
while(n&&n%2==0)
n/=2;
if(n)return false;
return true;
}
第4个回答  2013-09-20
淡淡的的顶顶顶顶顶的顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
相似回答