我們可以通過對乙個整數 a 進行加1操作或者乘2操作使其轉換為另乙個整數 b 。
給出兩個整數 x , y ,計算至少需要多少步才能將 x 轉換為 y 。 .
input
輸入的第一行包含乙個整數 t (1 ≤ t ≤ 5 00 ),表示一共有 t 組測試資料。
每組測試資料佔一行,包含兩個整數 x , y (1 ≤ x ≤ y ≤ 10 18 )。
output
對於每組測試資料,輸出至少需要多少步才能將 x 轉換為 y 。
sample input
31 13 10
2 11
sample output
034
hint
對樣例2的解釋:只需3步即可將3轉換為10: 3 -> 4 -> 5 -> 10 。
對樣例3的解釋:只需4步即可將2轉換為11: 2 -> 4 -> 5 -> 10 -> 11 。
分析:
需用最少的步數將x轉化為y,則我們需要盡可能的多使用乘法,相應地,在這種步驟之下,由y反推x則需盡可能地使用除法、不使用減法。在這個前提下我們列出必須使用減法的情況:
1.y<2*x,即x>y/2,這種情況下只能由y做y-x次減法得到x。
2.y是乙個奇數,顯然,任何數乘2不可能等於乙個奇數,因此在這種情況下需先y-1得到乙個偶數再做除法。
ac**:
#include
int main()
else
else
k+=1;
y/=2;
}} printf("%lld\n",k);
} return 0;
}
python 整數轉換
整數轉換。編寫乙個函式,確定需要改變幾個位才能將整數a轉成整數b。示例1 輸入 a 29 或者0b11101 b 15 或者0b01111 輸出 2 示例2 輸入 a 1,b 2 輸出 2一 求a b異或後1的個數 n n 1 可以講n最右邊出現的第乙個1變為0.class solution def...
ip位址和整數轉換
inet addr函式 位址轉換,把 a.b.c.d 的ip位址轉換為32位長整數 宣告 unsigned long inet addr const char far cp 引數 cp 指向ip位址字串的指標 返回值 當函式成功呼叫時返回用32位整數表示的ip位址 失敗時返回inaddr none....
大整數除法(進製轉換)
將乙個長度最多為30位數字的十進位製非負整數轉換為二進位制數輸出。多組資料,每行為乙個長度不超過30位的十進位製非負整數。注意是10進製數字的個數可能有30個,而非30bits的整數 每行輸出對應的二進位制數。985 21111261111011001 11010011 10001100110這道題...