不使用中间变量,交换变量的值。求一个数二进制中1的个数

1.给定两个整形变量的值,将两个值的内容进行交换。
2. 不允许创建临时变量,交换两个数的内容(附加题)
3. 求10 个整数中最大值。
4. 写一个函数返回参数二进制中 1 的个数
比如: 15       0000 1111       4 个 1
程序原型:
int  count_one_bits(unsigned int value)
{
       // 返回 1的位数

}

#include<stdio.h>
#include<stdlib.h>
void exchange(int *num1, int *num2)
{
int tmp;
tmp = *num1;
*num1 = *num2;
*num2 = tmp;
}
int main()
{
int num1=0;
int num2=0;
scanf("%d%d", &num1, &num2);
printf("num1=%d  num2=%d\n", num1, num2);
exchange(&num1,&num2);
printf("num1=%d  num2=%d\n", num1, num2);
system("pause");
return 0;
}

#include<stdio.h>
#include<stdlib.h>
int main()
{
int num1=0;
int num2=0;
scanf("%d%d", &num1, &num2);
printf("num1=%d  num2=%d\n", num1, num2);
num1 = num1 + num2;
num2 = num1 - num2;
num1 = num1 - num2;
printf("num1=%d  num2=%d\n", num1, num2);

system("pause");
return 0;
}

#include<stdio.h>
#include<stdlib.h>
int max_num(int *p)
{
int i = 0;
for (i = 0; i <9; i++)
{
if (p[i]>p[i + 1])
{
p[i + 1] = p[i];
}
}
return p[9];
}
int main()
{
int arr[10];
for (int i = 0; i < 10; i++)
{
scanf("%d", &arr[i]);
}
int ret = max_num(arr);
printf("%d\n", ret);
system("pause");
return 0;
}

#include<stdio.h>
#include<stdlib.h>              
int  count_one_bits(unsigned int value)
{
int count = 0;
for (int i = 0; i < 32; i++)
{
if (value & 1 == 1)
{
count++;
}
value = value >> 1;
}
return count;
}
int main()
{
unsigned int value= 0;
scanf("%d", &value);
int ret = count_one_bits(value);
printf("%d\n", ret);
system("pause");
return 0;
}

时间: 2024-10-27 12:49:28

不使用中间变量,交换变量的值。求一个数二进制中1的个数的相关文章

求一个数二进制中1的个数(优化)。判断一个数是不是2的n次方

求一个数二进制中1的个数: 一般方法: #include<stdio.h> #include<stdlib.h> int   count_one_bits(unsigned int value) { int count = 0; for (int i = 0; i < 32; i++) { if (value & 1 == 1)      (%2相当于&1) { count++; } value = value >> 1;      (右移一位相当

Binary system(求区间内二进制中1的个数最多的数)

Description 给定一个范围[a,b]  (0<=a<b<=10^18) 求出该范围内二进制中1的个数最多的数,如果存在多个答案,输出最小的那个数 Input 输入数据有多组,每组数据输入两个整数a,b,表示区间[a, b]. Output 输出该区间内二进制的1最多的整数,如果有多个数二进制1的个数相同,输出最小的那个数. Sample Input 4 87 14 Sample Output 77 HINT 思路: 区间[a,b],如果a==b,输出a, 先把a,b化为二进制数

第2章 数字之魅——求二进制中1的个数

求二进制中1的个数 问题描述 对于一个字节(8bit)的变量,求其二进制表示中“1”的个数,要求算法的执行效率尽可能地高. [解法一] 可以举一个八位的二进制例子来进行分析.对于二进制操作,我们知道,除以一个2,原来的数字将会减少一个0.如果除的过程中有余,那么就表示当前位置有一个1. 以10 100 010为例: 第一次除以2时,商为1 010 001,余为0. 第二次除以2时,商为101 000,余为1. 因此,可以考虑利用整型数据除法的特点,通过相除和判断余数的值来进行分析.于是有了如下的

求二进制中1的个数的五种方法

#include<iostream> using namespace std; //求二进制中1的个数:对于一个字节(8bit)的变量,要求算法的执行效率尽可能的高 //1,对于二进制,对2求余可得到这一位是0还是1 int count1(int v) { int num=0; while(v) { if(v%2==1) ++num; v=v/2; } return num; } //2.除2可用右移操作,提高效率,判断一位是否为1可用与来判别  int count2(int v) { int

求一个整数的二进制中1的个数

题目:输入一个整数,求该整数的二进制表达中有多少个1.例如输入10,由于其二进制表示为1010,有两个1,因此输出2. 假设该整数为i.首先i和1做与运算,判断i的最低位是不是为1.接着把1左移一位得到2,再和i做与运算,就能判断i的次高位是不是1……这样反复左移,每次都能判断i的其中一位是不是1.基于此,我们得到如下代码 int NumberOf1_Solution(int i) { int count = 0; unsigned int flag = 1; while(flag) { if(

说一说,求一个正整数的二进制中0的个数

昨天突然看到一个算法题:一个正整数a的二进制中0的个数: 话说这是个老题了,直观的算法就每次右移一位,直到0为止:代码就省略了: 仔细想想有更好的方案么? 就是这个题可以转换成一个正整数~a的二进制中1的个数: 求1的个数这个貌似就很熟悉了吧: int num = 0; b = ~a; while(b){ num++; b = b & (b-1); } 是不是容易了许多呢 另外像java和python这种没有unsigned的语言要自己去转 b = ~a & 0x0ffff

编程之美2.1 求二进制中1的个数

最近一段的时间,一直在看编程之美之类的算法书籍,刚开始看编程之美,感觉到难度太大,有时候也不愿意去翻动这本书,不过,经过一段时间的修炼,我也彻底的喜欢上这本书了, 书中的算法涉及到很多方面,树,链表,位运算,数组,hash表应用等等. 由于最近事情也忙得差不多了,我重新写了一遍编程之美中的算法,在这里记录下来,以便以后阅读方便. 第一道题从2.1写起,这道题目难度不是很大,首先,给出这个题目的函数声明: /*2.1 求二进制中1的个数*/ int DutCountOf1InBin_1(unsig

转载-求一个数转换成为二进制中1的个数

转载自:求一个数转换为二进制中1的个数 // Count1--01.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using namespace std; int coutn1(int num) { int result = 0; while (num) { result+=num&0x01;//如果是1的话,整个个数加1,如果是0的话,那么就是+0:这样就可以知道二进制中1的个数了

求二进制中1的个数

#include "stdio.h" int count_one_bits(unsigned int value) {   int count=0;   while(value)   {   if(value%2==1)   {   count++;   }   value=value/2;   }   return count; } int main() { unsigned int num=0; int ret=0; scanf("%d",&num);