HDOJ 2035 人見人愛A B 詳解 多注釋

2021-10-04 21:38:37 字數 1785 閱讀 8869

/*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的最後三位表...