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 展开
输入数据有多组,每组输入一个正整数N(可用32位整型表示)。
Output
每组输出:若N是2的幂,输出1;否则输出0,占一行;
Sample Input
2
1023
1024
Sample Output
1
0
1 展开
5个回答
展开全部
你可以先做一个预处理。例如说有一个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); //这个才是被询问的数
....
}
那么你在初始化的时候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); //这个才是被询问的数
....
}
展开全部
#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 也判断和输出一次。
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
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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");
}
}
#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");
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
bool ans(int n)
{
while(n&&n%2==0)
n/=2;
if(n)return false;
return true;
}
{
while(n&&n%2==0)
n/=2;
if(n)return false;
return true;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
淡淡的的顶顶顶顶顶的顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询