描述:
求a^b的最後三位數表示的整數。說明:a^b的含義是「a的b次方」。
輸入:
輸入資料報含多個測試例項,每個例項佔一行,由兩個正整數a和b組成(1<=a,b<=10000),如果a=0, b=0,則表示輸入資料的結束,不做處理。
輸出:
對於每個測試例項,請輸出a^b的最後三位表示的整數,每個輸出佔一行。
樣例輸入:
2 3
12 6
6789 10000
0 0樣例輸出:
8 984
1傻瓜**如下(非快速冪):
1 #include2intmain()3
11 printf("
%d\n
",k);
12 k=1;13
}1415return0;
16 }
快速冪**:
1 #include2int fastpow(int a,int b,int
kkk)
8 b >>= 1
;9 a= a*a%kkk;10}
11return
ans;12}
13int
main()
1421
22return0;
23 }
解題思路(快速冪):
(11的二進位制是1011.即
11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1。
備忘錄位運算:右移一位相當於除2.左移一位相當於乘2)
本題正式思路:while迴圈就是控制當b為0的時候迴圈結束。if語句就是使用按位與「&」,當兩邊都為1,表示式為1,這個是用來判斷二進位制數最後一位是否為1。如果為1,ans就要乘x^i,i為該位在二進位制數中的位置。>>為位運算子,右移一位,即去掉已經計算過的部分。最後的
a= a*a%kkk;用來標記記錄x^2^i,迴圈i次即去掉了i位,當第i+1位為1時,sum就要乘x^2^i。~
HDU 2035 人見人愛A B
法一 每次取餘數 include includeint main system pause return 0 法二 其實直接每次取餘數就能過的 第一遍就是用這種方法過的 這次算是用二分加速過的吧 就是每次都講底數平方 指數除以2 要是偶數沒問題 要是奇數就在將多餘的那部成到sum中 初始值為1 不停...
HDU 2035 人見人愛A B
problem description 求a b的最後三位數表示的整數。說明 a b的含義是 a的b次方 input 輸入資料報含多個測試例項,每個例項佔一行,由兩個正整數a和b組成 1 a,b 10000 如果a 0,b 0,則表示輸入資料的結束,不做處理。output 對於每個測試例項,請輸出a...
HDU 2035 人見人愛A B
題目連線 法一 每次取餘數 1 include2 include3 intmain 413 system pause 14return0 15 法二 其實直接每次取餘數就能過的 第一遍就是用這種方法過的 這次算是用二分加速過的吧 就是每次都講底數平方 指數除以2 要是偶數沒問題 要是奇數就在將多餘的...