/*problem description
求a^b的最後三位數表示的整數。
說明:a^b的含義是「a的b次方」
input
輸入資料報含多個測試例項,每個例項佔一行,由兩個正整數a和b組成(1<=a,b<=10000),如果a=0, b=0,則表示輸入資料的結束,不做處理。
output
對於每個測試例項,請輸出a^b的最後三位表示的整數,每個輸出佔一行。
sample input
2 312 6
6789 10000
0 0sample output
8984
1解讀題目:
題目的資料可以很大,幾乎無法用計算器直接算出結果,但是仔細審題,可以發現題目僅要求輸出計算結果的後三位數即可。我們不妨列幾個乘法豎式,看看其中的規律異常貼心的示例:
e.g. one:
輸入資料:123
2即計算: 123
*123=15
,129 後三位:129
豎式:
123*123
——————————
3692460
1230
0 ———————————
15,12
9e.g. two:
輸入資料: 6789
3即計算: 6789
*6789
*6789
=312
,908
,547
,069 後三位:069
豎式:
6,789*6
,789
————————————
61,1015
43,1
2047
52,3
0040
734,
000 —————————————————
46090,5
21*6,
789//此處我偷個懶,可以自行補充
—————————————————————————
3129085
47,0
69綜上所述:當計算的資料超過3位數時,只需用資料的後三位進行計算即可
解題**:
# include
intmain()
int fect = a;
int ge, shi, bai;
ge = fect %10;
//保留個位
shi = fect %
100/10;
//保留十位 //或者寫成 shi = a / 10 % 10;
bai = fect /
100;
//保留百位
/*關鍵**:不管計算資料是否夠三位數,都可以看成三位數和三位數相乘,可自行在草稿紙上列個乘法豎式看看*/
// fect = (原百位數的個位*fect*1 + 十位*fect*10 + 百位*fect*100) % 1000
for(
int i =
1; i < b; i++
)//需要注意迴圈相乘的次數
//輸出結果
printf
("%d\n"
, fect);}
return0;
}
HDOJ 2035 人見人愛A B
problem description 求a b的最後三位數表示的整數。說明 a b的含義是 a的b次方 input 輸入資料報含多個測試例項,每個例項佔一行,由兩個正整數a和b組成 1 a,b 10000 如果a 0,b 0,則表示輸入資料的結束,不做處理。output 對於每個測試例項,請輸出a...
HDOJ 2035 人見人愛A B
problem description 求a b的最後三位數表示的整數。說明 a b的含義是 a的b次方 input 輸入資料報含多個測試例項,每個例項佔一行,由兩個正整數a和b組成 1 a,b 10000 如果a 0,b 0,則表示輸入資料的結束,不做處理。output 對於每個測試例項,請輸出a...
HDOJ 2035 人見人愛A B 快速冪求模)
description 求a b的最後三位數表示的整數。說明 a b的含義是 a的b次方 input 輸入資料報含多個測試例項,每個例項佔一行,由兩個正整數a和b組成 1 a,b 10000 如果a 0,b 0,則表示輸入資料的結束,不做處理。output 對於每個測試例項,請輸出a b的最後三位表...