C語言競賽題目:[4]高次方數的尾數?

問題:

求13的13次方的最後三位數。

演算法分析:

解本題最直接的方法是:將13累乘13次方擷取最後三位即可。

但是由於計算機所能表示的整數範圍有限,用這種“正確”的演算法不可能得到正確的結果。事實上,題目僅要求最後三位的值,完全沒有必要求13的13次方的完整結果。

研究乘法的規律發現:乘積的最後三位的值只與乘數和被乘數的後三位有關,與乘數和被乘數的高位無關。利用這一規律,可以大大簡化程式。

碼源:

#include

void main()

{

int i,x,y,last=1; /*變數last儲存求X的Y次方過程中的部分乘積的後三位*/

printf("Input X and Y(X**Y):");

scanf("%d**%d",&x,&y);

for(i=1;i<=y;i++) /*X自乘Y次*/

last=last*x%1000; /*將last乘X後對1000取模,即求積的後三位*/

printf("The last 3 digits of %d**%d is:%d\\n",x,y,last%1000); /*列印結果*/

}

執行結果:

Input X and Y(X**Y):13**13

The last 3 digits of 13**13 is:253

Input X and Y(X**Y):13**20

The last 3 digits of 13**20 is:801

C語言競賽題目 (共21篇) 上一篇:繪製餘弦曲線 下一篇:數制轉換

語言, 題目, 次方, 尾數, 高次方,
相關問題答案