1012.十进制整数的补码


自己的方法不适用性太差了 因为要另外处理0;
所以不建议采用

import java.util.Scanner;
class Solution {
      public int bitwiseComplement(int N) {
            String str = "";
            int sum = 0 ;
            if(N == 0) {
                return 1;
            }
            while( N >0 ) {
                if(N % 2 == 0) {
                    str = 1 + str;
                }
                else {
                    str = 0 + str ;
                }
                N /= 2;
            }
            for(int i = 0 ; i <str.length(); i++) {
                if(str.charAt(i) == '1')
                    sum = (sum)*2 +1;
                else
                    sum = (sum)*2 +0;
            }
            return sum;
        }
}

其他版本 emmmm 也是要另外处理 0 和 1 不过他方法确实挺好的 采用了位运算 get~~~~

class Solution {
    public int bitwiseComplement(int N) {
        int i, M=N;
        for (i=1 ; i<=N ; i<<=1){
            M = M^i;
        }
        return N==0 ? 1 : M ;
    }
}

第二种位运算 很ok 基本都是这种思路

public int bitwiseComplement(int N) {
        if (N == 0) return 1;
        int ones = 0, tmp = N;
        while (tmp != 0) {
            tmp = tmp >> 1;
            ones = ones << 1;
            ++ones;
        }
        return N ^ ones;
    }

原文地址:https://www.cnblogs.com/cznczai/p/11150420.html

时间: 2024-10-08 16:02:13

1012.十进制整数的补码的相关文章

Leetcode-1012 Complement of Base 10 Integer(十进制整数的补码)

1 #define _for(i,a,b) for(int i = (a);i < (b);i ++) 2 class Solution 3 { 4 public: 5 int bitwiseComplement(int N) 6 { 7 if(N==0) 8 return 1; 9 string s; 10 while(N) 11 { 12 s+= N%2+'0'; 13 N/=2; 14 } 15 reverse(s.begin(),s.end()); 16 17 _for(i,0,s.si

分析轮子(三)- 十进制整数怎么变成无符号二进制的整数的

前言:在 分析轮子(二)- << ,>>,>> (左移.右移.无符号右移)的时候发现十进制数转二进制数的时候,负数的位数是够的,比如:负整数 -15 的二进制表示是:11111111111111111111111111110001 ,但是 正整数 15 的二进制表示是:1111,抱着好奇心,我看了一下源码,现分析如下. 注:玩的是JDK1.7版 一:请先看一下如下资料,他们解释了计算机中为什么使用二进制表示数据?计算机中正数.零.负数是如何表示的以及为什么? 1):关于

数组-08. 字符串转换成十进制整数(15)

1 #include<iostream> 2 #include<string> 3 using namespace std; 4 int main(){ 5 string s; 6 int i,sum=0; 7 bool flag=false,f=false; 8 getline(cin,s); 9 for(i=0;s[i]!='#';++i){ 10 if(s[i]=='-'&&!flag) 11 f=true; 12 else if(s[i]<='9'&a

数组-08. 字符串转换成十进制整数

数组-08. 字符串转换成十进制整数(15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 张彤彧(浙江大学) 输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出.如果过滤后字符串的首字符为“-”,代表该数是负数. 输入格式: 输入在一行中给出一个以#结束的非空字符串. 输出格式: 在一行中输出转换后的十进制数.题目保证输出在长整型范围内.

把十进制整数转换为r(r=2)进制输出(顺序栈实现)

上周的第二个作业补上~~ 上周的要求: 1.给出顺序栈的存储结构定义. 2.完成顺序栈的基本操作函数. 1)      初始化顺序栈 2)      实现入栈和出栈操作 3)      实现取栈顶元素和判空操作 把十进制整数转换为r(r=2)进制输出 3.编写主函数实现基本操作函数功能,并设置测试数据,测试合法和非法数据的输出结果. 4.程序调试运行并保存输出结果. 5.整理并提交实验作业. 1 #include <cstdio> 2 #include <cstring> 3 #d

5-2?字符串转换成十进制整数

5-2 字符串转换成十进制整数   (15分) 输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出.如果在第一个十六进制字符之前存在字符"-",则代表该数是负数. 输入格式: 输入在一行中给出一个以#结束的非空字符串. 输出格式: 在一行中输出转换后的十进制数.题目保证输出在长整型范围内. 输入样例: +-P-xf4+-1!# 输出样例: 这个题有一个坑点: 就是如果是0的话前面没有负号 -390

十六进制字符串转十进制整数

十六进制字符串转十进制整数 编写一个函数,函数接收一个字符串,是由十六进制数组成的一组字符串,函数的功能是把接到的这组字符串转换成十进制数字.并将十进制数字返回. #include <iostream> using namespace std; // 十六进制字符串的最大长度 #define MAX_HEX_STR_LEN 100 bool hexToDec(char shex[], int & idec) { size_t i = 0, len = 0; int mid = 0; l

Ex 2_25 n位十进制整数转换为二进制形式..._第四次作业

(a)   当n=1时,(10)d=(1010)b 当n=2时,(100)d=(10)d x (10)d=(1010)b x (1010)b 当n=4时,(10000)d=(100)d x (100)d=(1010)b x (1010)b x (1010)b x (1010)b - 因此z=pwr2bin(n/2) T(n)=T(n/2)+(cn/2)log23=>T(n)=O(nlog23) (b) 若十进制整数x的位数等于1,则返回binary[x] 假设位数为n(n>1且n为2的幂),则

编写一个算法,将非负的十进制整数转换为其他进制的数输出,10及其以上的数字从‘A’开始的字母表示

编写一个算法,将非负的十进制整数转换为其他进制的数输出,10及其以上的数字从‘A’开始的字母表示. 要求: 1) 采用顺序栈实现算法: 2)从键盘输入一个十进制的数,输出相应的八进制数和十六进制数. #include "stdio.h" #define StackSize 100 typedef char ElemType; typedef struct { ElemType data[StackSize]; int top; }SqStack; int trans(int d, in