题目:编程求出一个整数的任意次方的最后三位数,即求x^y的最后三位数,其中x和y从键盘输入。
程序分析:一个整数的任意次方很可能产生越界情况,要考虑计算结果是否越界的问题,要避免产生越界问题同时又不使程序结果产生误差。
其实这道题是会溢出的,但是数学有很奇怪的:
a 的 b 次方的最后三位数
例如 11 的 5 次方 :最后三位数 = 051
如果 11 每次 的 b 次方都取出最后三位数 * 11 那么五次都的最后三位 也是 051
11的5次方 = 161051
last:11
last:121
last:1331
last:14641
last:161051
反正是数学的奥秘
代码:
#include <stdio.h> int main() { int i, a, b, last = 1; printf("输入a、b的值:"); scanf("%d%d", &a, &b); for (i = 1; i <= b; i++) { last *= a; // last = last % 1000; printf("last:%d\n", last); } printf("res:%03d", last); //注意这里需要用 0 填充 C语言只允许0填充 return 0; }
标签:11,last,产生,越界,三位数,次方 From: https://www.cnblogs.com/bi-hu/p/17003388.html