输入两个整数m和n,计算m需要改变多少位才能得到n

题目:输入两个整数m和n,计算m需要改变多少位才能得到n?

解析:

这个题我最开始是没有思路的,想了很久才有点思路,思路的来源是把他们转化成二进制后才有的

例如:(5)的二进制:0101  (3)的二进制:0011

如果要把5变成3的话,需要改变:2次,因为第一位0和最后一位1都相同

所以不需要改变,做法,先将两个数异或,然后求异或后1的个数

int GetCount(int N,int M)
{
	int value=N^M;//先将两个数异或
	int count=0;
	while(value)
	{
		count++;
		value=(value&(value-1));//求异或后1的个数
	}
	return count;
}

void TestGetCount()
{
	int n=5;  //0101
	int m=3; //1010
	//题目的意思本意是将:1010-->0101
	cout<<"count is :"<<GetCount(n,m)<<endl;
}
时间: 2024-11-09 04:48:08

输入两个整数m和n,计算m需要改变多少位才能得到n的相关文章

c语言:输入两个整数m和n,计算需要改变m的二进制表示中的多少位才能得到n

输入两个整数m和n,计算需要改变m的二进制表示中的多少位才能得到n? 解:第一步求这两个数的异或运算,将异或运算结果存起来:第二步统计这个运算结果当中1的位数 程序: #include<stdio.h> int count(int m,int n) { int t,count=0; t = m^n; while (t) { count++; t=t&(t-1); } return count; } int main() { int num1,num2,ret=0; printf(&qu

输入两个整数,放入到a与b变量中去,如果a&gt;b就将a与b中的值进行交换,否则就不交换。

import java.util.Scanner; /** * @author 蓝色以太 输入两个整数,放入到a与b变量中去,如果a>b就将a与b中的值进行交换,否则就不交换. */ public class Change { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入两个整数:"); int a = sc.nextInt

【C语言】用函数指针变量完成:输入两个整数,让用户选择函数,选择1输出较大的数,选择2输出较小的数

<pre name="code" class="cpp">//用函数指针变量完成:输入两个整数,让用户选择函数,选择1输出较大的数,选择2输出较小的数 #include <stdio.h> int max(int x,int y) { return (x>y)?x:y; } int min(int x,int y) { return (x>y)?y:x; } int main() { int (*p)(int,int); int

输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m 转载

题目:编程求解,输入两个整数n和m,从数列1,2,3,--n中随意取几个数,使其和等于m.要求将所有的可能组合列出来. 分析:分治的思想.可以把问题(m,n)拆分(m - n, n -1)和(m, n - 1). 注意点:1.n大于m时,可直接从n = m出开始搜索 2.结束条件:n < 1 || m < 1 3.打印输出结果.注意打印输出结果并不代表函数调用结束,以n = 7 和 m = 10为例,7.3和7.2.1都是一种结果,不能得到7.3的时候终止.打印输出的条件是n = m 程序代码

输入两个整数,要求输出其中值较大者。要求用函数来找大数。

/* p176 例7.2 输入两个整数,要求输出其中值较大者.要求用函数来找大数. (1)函数名:应是见名知意,反应函数的功能,今定名为max (2)函数的类型:由于给定的两个数是整数,显然其中大者也是整数,也就是说max函数的值(即返回主调函数的值)应该是整型. (3)max函数的参数个数和类型:max函数应当有两个参数,以便从主函数接受两个整数,显然,参数的类型应当是整型. 在调用max函数时,应当给出两个整数作为实参,传给max函数中的两个形参*/ //编写程序: //(1)先编写max函

输入两个整数a和b,计算a+b的和

//此题是输入多组数据 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { int a = scanner.nextInt(); int b = scanner.nextInt(); int c = a + b; System.out.p

C++ 算法之 输入两个整数m n,求计算需要改变m的二进制表示中的多少位才能得到n

思路:先把m与n进行异或运算,再统计异或结果当中的1的个数: 异或:相同为0,不同为1: 0^0 = 0; 1^1 = 0; 0^1 = 1; 1^0 = 1; 比如10 : 1010 :  13:1101: 10^13  ------>    1 0 1 0 1 1  0 1 结果                   0  1 1 1 异或有几个不同为就会有几个1:统计1的个数就知道需要改变几位了 // changeNumber.cpp : 定义控制台应用程序的入口点. // #include

编程求解,输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m。要求将所有的可能组合列出来

import java.util.LinkedList; import java.util.Scanner; public class Main { private static LinkedList<Integer> list = new LinkedList<>(); public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext(

JS写一个简单的程序,输入两个整数,打印这两个数的和,差,积,余数

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <input type="test"  id="n1" value="" /> <input type="test"  id=&