杭電oj 2035
題目:題目地址
Problem Description
求A^B的最后三位數(shù)表示的整數(shù)缴罗。
說明:A^B的含義是“A的B次方”
Input
輸入數(shù)據(jù)包含多個(gè)測試實(shí)例疲陕,每個(gè)實(shí)例占一行峡懈,由兩個(gè)正整數(shù)A和B組成(1<=A,B<=10000),如果A=0, B=0晒旅,則表示輸入數(shù)據(jù)的結(jié)束顾瞪,不做處理。
Output
對于每個(gè)測試實(shí)例猪狈,請輸出A^B的最后三位表示的整數(shù)箱沦,每個(gè)輸出占一行。
Sample Input
2 3
12 6
6789 10000
0 0
Sample Output
8
984
1
Author
lcy
代碼:
#include "stdio.h"
int main()
{
int n,m;
while(scanf("%d %d",&n,&m)!=EOF)
{
if(n<1||n>10000||m<1||m>10000)continue;
int sum=1;
for(int i=1;i<=m;i++)
{
sum*=n;
sum%=1000;
}
printf("%d\n",sum);
}
return 0;
}
做這道題的心路歷程:
講真雇庙,第一眼看到這道題谓形,很簡單,簡單到第一反應(yīng)就是pow()函數(shù)状共,也直接用了套耕,當(dāng)然pow()這個(gè)函數(shù)也是有點(diǎn)坑,首先這個(gè)函數(shù)本身也是有很多重載形式峡继。
C++提供以下幾種pow函數(shù)的重載形式:
double pow(double X,int Y);
float pow(float X,float Y);
float pow(float X,int Y);
long double pow(long double X,long double Y);
long double pow(long double X,int Y);
(引用自百度百科)
這么多數(shù)據(jù)類型冯袍,偏偏沒有題目要求的兩個(gè)都是整型,沒關(guān)系,計(jì)算完強(qiáng)制轉(zhuǎn)化就好了康愤,但是這時(shí)第二個(gè)坑來了儡循,當(dāng)數(shù)據(jù)較大時(shí),pow()計(jì)算量會很大時(shí)間也會大大提高征冷,同時(shí)不同編譯器的pow()結(jié)果可能會出現(xiàn)偏差择膝,而且題目要求結(jié)果取最后三位的整數(shù),所以最后決定不用pow()了检激,一步一步乘肴捉,同時(shí)每一步都取結(jié)果最后三位,這樣結(jié)果可能更加準(zhǔn)確叔收。