输入的数转化为二进制序列,并统计序列中1的个数

★输入的数转化为二进制序列,并统计序列中1的个数

描述:普通的模除取余后数直接除二的办法易于理解,但是对于输入的数只限于正数和零,对于负数则不适应,所以采用与后移位的方法以此来扩大数的输入范围。

#include<stdio.h>
int main()
{
int m,b,c,i;
int count = 0;
char a[32];
printf("请输入一个数:\n");
scanf("%d", &m);
for (i = 0; i < 32; i++)
{
if (m & 1 == 1)
{
count++;
}
c = m & 1;        //与0001相与,同1反0,取得余数,相当于模除(%)的效果
b = m >> 1;        //序列整体向右移一位,相当于(/2)的效果
m = b;
a[i] = c;
}
printf("该数的二进制序列为:\n");
for (i = 31; i >= 0; i--)
printf("%d", a[i]);
printf("\n");
printf("该序列中1的个数为:\n");
printf("count=%d", count);
printf("\n");
return 0;
}

时间: 2024-08-01 10:43:05

输入的数转化为二进制序列,并统计序列中1的个数的相关文章

【模板小程序】任意长度十进制数转化为二进制(java实现)

妈妈再也不用担心十进制数过大了233 import com.google.common.base.Strings; import java.math.BigInteger; import java.util.Scanner; /** * 任意长度十进制数转化为二进制 */ public class AnyNumberConverterFromDecimalToBinary { /** * * @param srcNum 待转换的十进制数 * @return 二进制字符串 */ private s

输入一个有序数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字

输入一个有序数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字.如果有多对数字的和等于输入的数字,输出任意一对即可.例如输入数组1.2.4.7.11.15和数字15.由于4+11=15,因此输出4和11. 1 #include<stdio.h> 2 #include<stdlib.h> 3 4 void findTwo(int *array, int len, int sum) 5 { 6 int beg = 0; 7 int end = len-1; 8 int

计算十进制数转化成二进制时1的个数

#include <iostream> using namespace std; int func(int x) { int cnt = 0; while (x) { cnt++; x = x&(x - 1); } return cnt; } int main() { cout << func(9999) << endl << func(8); cin.get(); return 0; } 输出8,1 其实上面那个函数输出结果是:形参x转化为二进制后

C语言将十进制数转化为二进制(递归,规定位数)

/*运用递归算法*/ #include<stdio.h>void B(int n)   //定义函数{ if (n != 0) {  printf("%d",n%2);  B(n / 2); }}int main(){ int n; printf("Input number:"); scanf("%d",&n); printf("输出二进制:"); B(n);   //在B()函数里打印二进制数 retur

将一个数转化为二进制后,求其中1的个数 C++

#include <iostream>using namespace std;int func(int x){ int count=0; while(x) { x=x&(x-1);//与的次数就是包含1的个数 count++; } return count;} void main(){ int x; cin>>x; cout<<func(x)<<endl; }

编写程序,要求用户输入英尺数,将其转化为米并显示。一英尺等于0.305米.

import java.util.Scanner; /** * @author 蓝色以太 * (将英尺转化为米)编写程序,要求用户输入英尺数,将其转化为米并显示.一英尺等于0.305米. */ public class Feet { public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("请输入英尺数:"); int feet=sc.nextInt()

【C语言】输入一个整数,输出该数二进制表示中1的个数(三种方法)

输入一个整数,输出该数二进制表示中1的个数.如输入32,输出1. 代码实现: 方法1:与运算 #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; int FindOneNumber(unsigned int num) {     int numberofOne = 0;     while (num)     {         num = num & (num - 1);         

22、输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 思路: n &(n-1)把n的最右边的1去掉,用count++计算1的个数  eg: 101 & 100 = 100   1 class Solution { 2 public: 3 int NumberOf1(int n) { 4 int count = 0; 5             while(n!=0){ 6                 count++; 7                 n = n&

剑指offer11:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。(进制转换,补码反码)

1. 题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 2. 思路和方法 使用移位(<<)和 “| & !”操作来实现.1的二进制是:前面都是0,最后一位为1.每次向左移位一下,使得flag的二进制表示中始终只有一个位为1,每次与n做位与操作,这样就相当于逐个检测n的每一位是否是1.unsigned int flag = 1; 3. C++核心代码 3.1 位运算 1 class Solution { 2 public: 3 int NumberOf1(int