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 >= 0) || (a >= 0 && b < 0)) count = 1;
        if(a < 0)
        {
            a += 2147483648;
        }
        if(b < 0)
        {
            b += 2147483648;
        }
        int c = a ^ b;

        while(c)
        {
            if(c % 2 == 1) count++;
            c = c >> 1;
        }
        return count;
 }

  

时间: 2024-12-20 16:22:30

LintCode_181 将整数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

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

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

将整数A转换为B

题目描述:如果要将整数A转换为B,需要改变多少个bit位? 样例:如把31转换为14,需要改变2个bit位. (31)10=(11111)2 (14)10=(01110)2 之前,我说过位运算的一些基本操作(详见:点击打开链接),此处其实求的是两个二进制中不同的位的个数.所以,可以采用两种方法. 1. 直接求出两个数的二进制表示,然后比较两个01字符串的不同的位的个数 2. 先对两个数异或,这样,求出的二进制数中1的个数就是两个数的不同位的个数 我这里只给出第二种方法的代码. 因为之前已经知道怎

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]);   }