C趣味程序百例(02)求數(shù)高次方數(shù)的尾數(shù)

字號:

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