題目**:
link
題目翻譯:
給定乙個正整數a(1<=a<=100),輸出a的最低位。
例如,給定a=26,我們可以將二進位制形式的a寫為11010,所以a的最低位是10,所以輸出應該是2。
另乙個例子是這樣的:給定a=88,我們可以用二進位制形式把a寫為1011000,所以a的最低位是1000,所以輸出應該是8。
輸入每行輸入僅包含乙個整數a(1<=a<=100)。包含「0」的行表示輸入結束,而此行不是輸入資料的一部分。
輸出對於輸入中的每個a,輸出僅包含其最低位的行。
題意:將十進位制寫成二進位制,然後輸出二進位制的最低位
26(10)=11010(2) 輸出:2(2的一次方);
88(10)=1011000(2) 輸出:8(2的三次方);
(最低位:倒著*2 直到第乙個1的時候截止)
思路:發現用二進位制表示時,最低為的二進位制形式為1+若干個0,可以用快速冪轉化為十進位制;
所以接下來判斷最低位的二進位制有t個0,結果輸出2的t次方;用t計數,"與"運算&判斷a二進位制形式最後一位是否為0,「右移」 >>a 一直到遇見1結束;
**
#include #define ll long long //重新命名 long long
using namespace std;
ll quickpow(ll x, ll n) //快速冪模版(俺也理解不太深刻)
return res;
}int main()
cout << quickpow(2,t) << endl;
}return 0;
}
Day1 位運算與快速冪 C 麥哲倫的異或
題目 link 題目翻譯 mzl非常喜歡xor,現在他得到了陣列a,a的長度是n,他想知道所有的xor a i a j 1 i,j n 陣列b的xor定義為b1 xor b2 xor bn 輸入多個測試用例,第一行包含乙個整數t 不超過20 表示用例數。每個測試用例包含四個整數 n m z l a1...
快速冪模版與位運算
powered by ab in 局外人 include typedef long long ll using namespace std const ll maxn 5e6 10 char buf 1 21 p1 buf,p2 buf inline ll getc inline ll read w...
基於位運算的快速冪與取餘運算
附上原題 題目描述 輸入b,p,k的值,求bp mod k的值。其中b,p,k為長整型數。輸入格式三個整數b,p,k.輸出格式輸出 bp mod k s s為運算結果 輸入輸出樣例 輸入 2 10 9 輸出 210 mod 9 7 該題需使用快速冪,以下是快速冪的方法 乙個數,例如 15 10 11...