由于進來的晚,前面的演算法雖然都補卡了,但是解題報告還沒有寫完,doing中
《演算法零基礎100講》(第19講) 進制轉換(一) - 入門_英雄哪里出來-CSDN博客
劍指 Offer 15. 二進制中1的個數 - 力扣(LeetCode) (leetcode-cn.com)
撰寫一個函式,輸入是一個無符號整數(以二進制串的形式),回傳其二進制運算式中數字位數為 '1' 的個數(也被稱為 漢明重量).),
示例 1:
輸入:n = 11 (控制臺輸入 00000000000000000000000000001011)
輸出:3
解釋:輸入的二進制串 00000000000000000000000000001011 中,共有三位為 '1',
示例 2:
輸入:n = 128 (控制臺輸入 00000000000000000000000010000000)
輸出:1
解釋:輸入的二進制串 00000000000000000000000010000000 中,共有一位為 '1',
示例 3:
輸入:n = 4294967293 (控制臺輸入 11111111111111111111111111111101,部分語言中 n = -3)
輸出:31
解釋:輸入的二進制串 11111111111111111111111111111101 中,共有 31 位為 '1',
由于本題輸入的全是二進制,所以位運算應該更簡便
class Solution {
public:
int hammingWeight(uint32_t n) {
int count=0;
while(n)//條件,n>0,由計算機系統知識與運算可知,把一個整數-1再和原整數做與運算會使最右邊的一個1變成0,只需要加一個計數器來計數了
{
n&=(n-1);//先相與再賦值
count++;//計數器
}
return count;
}
};
也許上面的與運算并不是很清晰,下面我將用草紙寫出

258. 各位相加 - 力扣(LeetCode) (leetcode-cn.com)
簡單的短除取余
給定一個非負整數 num,反復將各個位上的數字相加,直到結果為一位數,
示例:
輸入: 38
輸出: 2
解釋: 各位相加的程序為:3 + 8 = 11, 1 + 1 = 2, 由于 2 是一位數,所以回傳 2,
1837. K 進制表示下的各位數字總和 - 力扣(LeetCode) (leetcode-cn.com)
給你一個整數 n(10 進制)和一個基數 k ,請你將 n 從 10 進制表示轉換為 k 進制表示,計算并回傳轉換后各位數字的 總和 ,
轉換后,各位數字應當視作是 10 進制數字,且它們的總和也應當按 10 進制表示回傳,
class Solution {
public:
int addDigits(int num) {//用遞回做
if(num / 10 == 0) // 特殊情況一位數
{
return num;
}
// 拆分成多個數相加
int sum = 0;
while(num)
{
sum += num % 10;//拆分并加和
num /= 10;
}
return addDigits(sum);遞回
}
};
示例 1:
輸入:n = 34, k = 6
輸出:9
解釋:34 (10 進制) 在 6 進制下表示為 54 ,5 + 4 = 9 ,
示例 2:
輸入:n = 10, k = 10
輸出:1
解釋:n 本身就是 10 進制, 1 + 0 = 1 ,
簡單的短除法
class Solution {
public:
int sumBase(int n, int k) {//
int sum = 0 ;//計算和
while(n){//短除法
sum += n % k;//求幾進制就除幾取余
n /= k;
}
return sum;
}
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/354553.html
標籤:其他
