我的刷題日記(6)

2021-09-27 07:59:42 字數 828 閱讀 9832

題目描述

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。

首先得清楚怎麼求乙個整數的二進位制?

什麼是原碼,反碼,補碼?

比如用四位的二進位制數表示1 ,則為0001

正數的原碼:第一位是0(符號位)表示正數0001

負數的原碼:第一位是1表示負數。1001

正數的 : 原碼 = 反碼 = 補碼

負數的反碼: 符號位不變其餘取反。1變為0,0變為1。 1001 => 1110

負數的補碼: 負數的反碼加1。(比如說上面-1的反碼1110加1(先將1變成四位二進位制數0001)為11111)

兩個相反數二進位制的原碼相加不為0,所以兩個相反二進位制數相加要用它們的反碼相加才為0

現在來看看這道題目:

分步分析

1,首先要知道用js求乙個整數的二進位制。

2,如果該正數是負數還要用js求出它的補碼。

3,然後要找出該數中1的個數。

這個題目也沒說是多少位數的二進位制,我試了一下-1的輸出正確答案是32位,所以應該是用32位計算。

當為正數的時候不用管是多少位,但是當為負數的時候需要補滿32位。

function methoda(x)  else if(num < 0) 

while(num > 0)

if(x < 0) else if(point === 1)

len--;}}

return arr;

}// 在陣列中找出1的個數

function findone(arr)

}return num ;

}

我的刷題日記(9)

輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。function nodelist x const arr1 1,2,3,4,5,6 鍊錶節點的值 function getnodelist arr const root new nodelist arr 0 let p root for let i 1 i...

我的刷題日記(12)

輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。方法一 思路 先找出陣列中和等於sum的每一對,放在乙個陣列裡。比如 1,9 2,8 5,5 然後找出乘積最小的那一對 function findnumberswithsu...

我的刷題日記(13)

組合語言中有一種移位指令叫做迴圈左移 rol 現在有個簡單的任務,就是用字串模擬這個指令的運算結果。對於乙個給定的字串行s,請你把其迴圈左移k位後的序列輸出。例如,字串行s abcxyzdef 要求輸出迴圈左移3位後的結果,即 xyzdefabc 是不是很簡單?ok,搞定它!function lef...