帮忙修改一个C++程序,求给定的十进制整数N对应的2进制数中1的个数,附加要求如下:
输入:第一个整数表示有N组测试数据,其后N行是对应的测试数据,每行为一个整数。输出:N行,每行输出对应一个输入。#include<stdio.h>#include<std...
输入:第一个整数表示有N组测试数据,其后N行是对应的测试数据,每行为一个整数。输出:N行,每行输出对应一个输入。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,i,x;
char s[33];
scanf("%d", &n );
itoa( n, s, 2 );
x=0;
for( i=0;s[i];i++ )
if ( s[i]=='1' )
x++;
printf("%d\n", x );
return 0;
} 展开
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,i,x;
char s[33];
scanf("%d", &n );
itoa( n, s, 2 );
x=0;
for( i=0;s[i];i++ )
if ( s[i]=='1' )
x++;
printf("%d\n", x );
return 0;
} 展开
6个回答
展开全部
#include "stdio.h"
#include "stdlib.h"
int main(void){
int i,j,x,N,*p;
char s[33];
printf("Input N(int 0<N)...\nN=");
if(scanf("%d",&N) && N>0){
if(((p=(int *)malloc(sizeof(int)*N))==NULL)){
printf("Application memory failure...\n");
exit(0);
}
for(i=0;i<N;scanf("%d",p+i++));
printf("\n");
for(i=0;i<N;i++){
itoa(p[i],s,2);
for(x=j=0;s[j];x+=s[j++]-'0');
printf("%d\n", x );
}
free(p);
}
else
printf("Input error, the program exits.\n");
return 0;
}
展开全部
int i=0,n;
scanf("%d",&n);
int *s=(int*)malloc(sizeof(int)*n);
for(i=1;i<=n;i++)
{
scanf("%d",&s[i-1]);
}
for(i=0;i<n;i++)
{
int count=0;
while(s[i]>0)
{
if(s[i]%2!=0) //是否是奇数,是,表示末尾位为1
{
count++;
}
s[i]=s[i]>>1; //向右移一位
}
printf("\n%d",count);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
#include <stdlib.h>
int main()
{
int N,i,x=0,num=0;
scanf("%d", &N );
int input[N];//如果编译器支持变长数组用这个,不支持替换成 int input[512];
for(i=0;i<=N-1;++i){
scanf("%d",&input[i]);
}
for( i=0;i<=N-1;++i ){
x=input[i];
num=0;
while(x){
x=x&(x-1);
num++;
}
printf("%d\n", num);
}
return 0;
#include <stdlib.h>
int main()
{
int N,i,x=0,num=0;
scanf("%d", &N );
int input[N];//如果编译器支持变长数组用这个,不支持替换成 int input[512];
for(i=0;i<=N-1;++i){
scanf("%d",&input[i]);
}
for( i=0;i<=N-1;++i ){
x=input[i];
num=0;
while(x){
x=x&(x-1);
num++;
}
printf("%d\n", num);
}
return 0;
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,num,i,j,count=0;
char s[33];
int result[30];
scanf("%d", &n );
for (i = 0; i < n; ++i)
{
scanf("%d",&num);
itoa(num,s,2);
for(j = 0; s[j] != '\0'; j++)
{
if(s[j] == '1') count++;
}
result[i] = count;
count = 0;
}
for(i = 0; i < n; i++)
{
printf("%d\n",result[i]);
}
return 0;
}
追问
我试了下你的代码,但是存在编译错误如下:
In function ‘int main()’:
error: ‘itoa’ was not declared in this scope
itoa(num,s,2);
怎么修改?
追答
那就不要用itoa了,itoa不标准,直接除2算二进制好了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2017-10-21
展开全部
源代码
语言: G++ 用户名: 12345678lyy 题号: 1037
#include <iostream>
using namespace std;
float power(float a,int n)
{
if (n==1)return a;
else return a*=power(a,n-1);
}
int main()
{
float a;
int n;
cin>>a>>n;
float i=power(a,n);
cout<<<<i<<endl;
cout<<n<<endl;
return 0;
}
语言: G++ 用户名: 12345678lyy 题号: 1037
#include <iostream>
using namespace std;
float power(float a,int n)
{
if (n==1)return a;
else return a*=power(a,n-1);
}
int main()
{
float a;
int n;
cin>>a>>n;
float i=power(a,n);
cout<<<<i<<endl;
cout<<n<<endl;
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询