Problem Description
求A^B的最后三位數(shù)表示的整數(shù)。
說明:A^B的含義是“A的B次方”
Input
輸入數(shù)據(jù)包含多個測試實例移必,每個實例占一行室谚,由兩個正整數(shù)A和B組成(1<=A,B<=10000)崔泵,如果A=0, B=0,則表示輸入數(shù)據(jù)的結(jié)束憎瘸,不做處理。
Output
對于每個測試實例崎弃,請輸出A^B的最后三位表示的整數(shù)含潘,每個輸出占一行饲做。
Sample Input
2 3
12 6
6789 10000
0 0
Sample Output
8
984
1
這道題目的代碼其實很簡單遏弱,他的難點在于,當A和B非常大的時候漱逸,所求的結(jié)果會超過計算機整形的存取范圍游沿,所以不管用什么類型的參數(shù)肮砾,我們都無法將答案保存。
如果用數(shù)組保存仗处,當結(jié)果非常大的時候,會超過題目所給的memory limit吃环,所以也沒辦法用數(shù)組保存。
因為題目要求的是AB的最后三位表示的整數(shù)郁轻,AB%1000就能夠得到最后的三位整數(shù)文留。
快速冪取模的原理就是:積的取余等于取余的積的取余
即 (AxB)%C=[(A%C)x(B%C)]%C
知道這個原理后就很簡單啦
#include <stdio.h>
int main(){
int n,m;
int ans;
int i;
while(~scanf("%d%d",&n,&m)&&n&&m){
ans=1;
for(i=1;i<=m;i++){
ans=(ans*n)%1000;
}
ans=ans%1000;
printf("%d\n",ans);
}
return 0;
}