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
淡淡的的顶顶顶顶顶的顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶

c语言怎么写输入数据有多组,每组输入一个正整数N?
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 的...

...组数据。 每组数据两行。 第一行包含一个正整数n(小于等于1000_百度...
1、首先打开visual studio软件,新建一个C语言文件。2、接着在C语言文件的顶部导入库内容。3、接着运用scanf函数接收用户输入的字符串。4、然后我们利用printf函数打印一下用户输入的内容。5、运行程序以后就会弹出如下图所示的CMD界面,我们输入内容就会自动接收到,然后原样输出内容。6、最后如果你接收其...

...组数据。 每组数据两行。 第一行包含一个正整数n(
用 ctrl-C 组合键结束程序.include <stdio.h> int d[1000]; \/\/ 放原始数据 int v[1000][2]; \/\/放不同数据和数据出现的个数 int main(){ int i,j,k,n,m,flag=0;Lab:m=0;scanf("%d",&n);for (i=0;i<n;i++) scanf("%d",&d[i]);v[m][0]=d[0];v[m][1]=...

...输入数据有多组。每组输入数据包括一个整数N和N个整数……求大神,在...
printf("%d\\n", s);} }

c语言如何输入整数N,代表下面有N组测试数据,接下来的N行,每行为一个...
include <stdio.h>int main(){int i,N;scanf("%d",&N);int *t=new int[N];for(i=0;i<N;i++)scanf("%d",&t[i]);for(i=0;i<N;i++)if(t[i]%2==1)printf("YES!\\n");elseprintf("NO!\\n");return 0;}

输入 多组数据,每次输入是一个正整数,当输入为0时结束 输出 对于每个...
for(int j=0;j

输入数据有多组,每组占一行,每行的第一个数是整数n(n<100),表示需要统 ...
int main(){ int n, a[100], i, temp, min, k;while(scanf("%d",&n)!=EOF){ if(n==0) return 0;for(i=0;i<n;i++){ scanf("%d",&a[i]);if(i==0){ min=a[i];k=0;} else { if(a[i]<min){ min=a[i];k=i;} } } temp=a[0];a[0]=a[k];a[k]=...

...input 有多组测试数据,每组一行,输入一个正整数n.output 对于每组数据...
include<stdio.h> void main(){ int i,N,sum;while(scanf("%d",&N)){ sum=0;for(i=1;i<=N;i++)sum+=i;printf("%d\\n",sum);} }

c语言如何实现输入数据有多组
int a,b,n;scanf("%d",&n);while(n<1||n>10){ printf("Error!!");scanf("%d",&n);} while (n--){ scanf("%d%d",&a,&b);printf("%d\\n",a+b);} } \/\/ include <stdio.h> void main(){ int a,b;while (scanf("%d%d",&a,&b)!=EOF)\/\/以0结束就把0替换EOF { ...

...每个测试用例包含一个正整数N,随后是N个整数
改正了几处错误:include "stdio.h"main(){int n,a[100],sum=0,i;while(scanf("%d",&n)==1){if(n==0)break;sum=0;for(i=0;i<n;i++){scanf("%d",&a[i]);sum+=a[i];if(i==n-1)printf("%d\\n",sum);}}}

相似回答