- 问题描述:求13的13次方的最后三位数。
- 问题分析:许多初学者看到本题最容易想到的方法是:将13累乘13次后,截取最后三位。但是,计算机中存储的整数有一定的范围,超出范围后将不能正确表示,所以用这种方法不可能得到正确的结果。实际上,题目仅要求求出13的13次方的后三位,没必要全求出来。
- 算法设计:有研究表明:乘积的最后三位数的值只与乘数和被乘数的后三位有关,与乘数和被乘数的高位无关。
#include <iostream>
#include <stdlib.h>
using namespace std;
int main(){
int i, x, y, last = 1;
printf("Input x and y:\n");
cin >> x >> y;
for ( i = 0; i <= y ; i++)
{
last = last*x % 1000;
}
printf("The last three digits is:%d\n", last);
system("pause");
return 0;
}
在该程序中,将累乘得到的积存储在变量last中,在进行下一次相乘之前先截取last的后三位再相乘,将结果存储到last中。上述程序能够有效解决高次方数尾数的问题。