将整数A转换为B

题目描述:如果要将整数A转换为B,需要改变多少个bit位?

样例:如把31转换为14,需要改变2个bit位。

(31)10=(11111)2

(14)10=(01110)2

之前,我说过位运算的一些基本操作(详见:点击打开链接),此处其实求的是两个二进制中不同的位的个数。所以,可以采用两种方法。

1. 直接求出两个数的二进制表示,然后比较两个01字符串的不同的位的个数

2. 先对两个数异或,这样,求出的二进制数中1的个数就是两个数的不同位的个数

我这里只给出第二种方法的代码。

因为之前已经知道怎么求出一个二进制数中1的个数的方法(详见:点击打开链接),所以,此处讲解忽略。还是注意python中对负数二进制的处理就行。代码如下:

class Solution:
    """
    @param a, b: Two integer
    return: An integer
    """
    def bitSwapRequired(self, a, b):
        a ^= b
        if a > 0:
            return self.helper(a)
        else:
            temp = abs(a - 1)
            return 32 - self.helper(temp)

    # helper()统计正数的二进制中1的个数
    def helper(self, n):
        count = 0
        while n != 0:
            n = n & (n - 1)
            count += 1
        return count
        # write your code here

先对两个数异或,再求解异或之后的二进制值中1的个数。

时间: 2024-10-10 02:13:26

将整数A转换为B的相关文章

整数n转换为以b进制的数,itob

写一个函数itob(int n,char s[], int b),将整数n转换为以b进制的数.保存到s中. #include<stdio.h> #include<stdlib.h> void itob(int n, char s[],int b)//整数n转换为以b进制的数 { int i = 0; int start = 0; int end = 0; if ((b == 2) || (b == 8))//2进制和8进制 { while (n) { s[i] = n%b + '0

将整数n转换为以b进制的数

题目: 编写一个函数itob(int n,char s[], int b),将整数n转换为以b进制的数,保存到s中. 题目分析: 对于这个问题,根据进制之间的转换特点,将十进制的整数n转换为其他进制,可以利用模除的方式将其转换,但是其中有一个问题:16进制数中表示0123456789abcdef,所以可以将16进制的转换另外解决.解决方式通过建立一个指针变量,通过指针进行解引用,同时建立一个数组用来存放转换后的数,然后进行数组元素的逆置. #define _CRT_SECURE_NO_WARNI

LintCode_181 将整数A转换为B

题目 如果要将整数A转换为B,需要改变多少个bit位? 如把31转换为14,需要改变2个bit位. (31)10=(11111)2 (14)10=(01110)2 思路 要考虑负数的问题 如果 一正一负 将他们去全部变成正数 后要+1个符号为的变化 都是负数 只要变成正数进行比较就行了 C++代码 int bitSwapRequired(int a, int b) { // write your code here int count = 0; if((a < 0 && b >

识别字符串中的整数并转换为数字形式

识别字符串中的整数并转换为数字形式(40分) 问题描述: 识别输入字符串中所有的整数,统计整数个数并将这些字符串形式的整数转换为数字形式整数. 要求实现函数: void take_num(const char *strIn, int *n, unsigned int *outArray) [输入] strIn:   输入的字符串 [输出] n:       统计识别出来的整数个数 outArray:识别出来的整数值,其中outArray[0]是输入字符串中从左到右第一个整数, outArray[

Lintcode 将整数A转换为B

例子 如把31转换为14,须要改变2个bit位. (31)10=(11111)2 (14)10=(01110)2 贴代码 class Solution { public: /** *@param a, b: Two integer *return: An integer */ int bitSwapRequired(int a, int b) { // write your code here unsigned int flag = 1; int i =0; int j = 0; int c=

C#Winform基础 十进制(整数)转换为八进制数(有符号)

镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ 1 UI 2 code 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using S

C#Winform基础 十进制(整数)转换为十六进制有符号

镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ 1 UI 2 code 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using S

【C语言】【笔试题】编写一个函数itob(int n,char s[], int b),将整数n转换为以b进制的数。保存到s中。

#include <stdio.h> static int i=0; int itob(int n,char s[],int b) { if(n<2) { s[i]=n+'0'; } else { itob(n/2,s,b); //递归 i++; n=n%2; s[i]=n+'0'; } s[i+1]='\0';//结束标志 return 0; } int main () { char s[20]; int num=0; scanf("%d",&num); i

【详解】C语言:编写一个函数itob(int n,char s[], int b),将整数n转换为以b进制的数。保存到s中。

#include<stdio.h> void itob(int n,char s[], int b) {  int i=1;  for(;i<=32;i++)    //共循环了32次,保证得到32位的二进制数  {   s[i-1]= n % b;   //数组是从编号0开始的,一直到编号31结束   n = n/b ; //用模除的方法依次得到每位进制数  }  for(i=32;i>0;i--)  {   printf("%d",s[i-1]);   }