6.高次方數(shù)的尾數(shù)
求13的13次方的最后三位數(shù)
*問題分析與算法設(shè)計
解本題最直接的方法是:將13累乘13次方截取最后三位即可。
但是由于計算機所能表示的整數(shù)范圍有限,用這種“正確”的算法不可能得到正確的結(jié)果。事實上,題目僅要求最后三位的值,完全沒有必要求13的13次方的完整結(jié)果。
研究乘法的規(guī)律發(fā)現(xiàn):乘積的最后三位的值只與乘數(shù)和被乘數(shù)的后三位有關(guān),與乘數(shù)和被乘數(shù)的高位無關(guān)。利用這一規(guī)律,可以大大簡化程序。
*程序說明與注釋
#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); /*打印結(jié)果*/
}
*運行結(jié)果
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
求13的13次方的最后三位數(shù)
*問題分析與算法設(shè)計
解本題最直接的方法是:將13累乘13次方截取最后三位即可。
但是由于計算機所能表示的整數(shù)范圍有限,用這種“正確”的算法不可能得到正確的結(jié)果。事實上,題目僅要求最后三位的值,完全沒有必要求13的13次方的完整結(jié)果。
研究乘法的規(guī)律發(fā)現(xiàn):乘積的最后三位的值只與乘數(shù)和被乘數(shù)的后三位有關(guān),與乘數(shù)和被乘數(shù)的高位無關(guān)。利用這一規(guī)律,可以大大簡化程序。
*程序說明與注釋
#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); /*打印結(jié)果*/
}
*運行結(jié)果
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