引言:在计算中,幂函数的数据增长速率是很快的,而在计算机中数据类型的范围是有限的。难以定义一个变量存储幂函数的结果,那么在计算题中遇到了幂函数,如何处理?
看完下面两个例题,或许你就有了答案。
一、B2074 计算星期几
#include<stdio.h>
int main() {
int a, b, day = 1;
scanf("%d%d", &a, &b);
for (int i = 0; i < b; i++) {
day *= a;
day %= 7;
}
if (day == 1)
printf("Monday");
if (day == 2)
printf("Tuesday");
if (day == 3)
printf("Wednesday");
if (day == 4)
printf("Thursday");
if (day == 5)
printf("Friday");
if (day == 6)
printf("Saturday");
if (day == 0)
printf("Sunday");
return 0;
}
二、B2075 幂的末尾
#include<stdio.h>
int main() {
int a, b, S = 1;
scanf("%d%d", &a, &b);
for (int i = 0; i < b; i++) {
S *= a;
S %= 1000;
}
if (S >= 100) {
printf("%d", S);
}
else if ((S < 100) && (S >= 10)) {
printf("0%d", S);
}
else {
printf("00%d", S);
}
return 0;
}
总结
发现了吗?
没办法存储下幂函数计算的结果,可以利用乘除法的交换律和for循环,存储下每一步的有效值,就能保证值不超过变量的存储范围。