首先,题目不难,简单的循环求值。为:求X^Y的最后三位数,一般情形下可取值然后取模搞定。
解析:一般情况下,求X^Y很简单,使用pow(x,y)瞬间搞定,然后对其模1000,最后三位就搞定了。事实上,没这么简单,想想4151784^9941241次方算出来等于多少,估计你自己的电脑很难搞定,所以得变通一下。
看看那些意想不到的算法,甚至很难弄清楚其中的数学原理。简单点说,想不出来就是数学没学好。为什么别人能想到用最后三位相乘数字依旧能保持不变呢,看来水还很深。
//引用的别人的代码,莫怪
#include "stdio.h"
int main(void){
int i,x,y,z = 1; //x,y为x^y,z为最后三位数
printf("请输入两个数:\n");
scanf("%d%d",&x,&y); //输入底数和幂数
for (i = 1;i <= y;i++){ //底数每乘一次就取其后三位数
z = z*x % 1000; //仔细看这里
}
if (z > 100){
printf("最后三位数为:%d\n",z);
}
else if(z < 10){
printf("最后三位数为:00%d\n",z);
}else{
printf("最后三位数为:0%d\n",z);
}
return 0;
}
#include "stdio.h"
int main(void){
int i,x,y,z = 1; //x,y为x^y,z为最后三位数
printf("请输入两个数:\n");
scanf("%d%d",&x,&y); //输入底数和幂数
for (i = 1;i <= y;i++){ //底数每乘一次就取其后三位数
z = z*x % 1000; //仔细看这里
}
if (z > 100){
printf("最后三位数为:%d\n",z);
}
else if(z < 10){
printf("最后三位数为:00%d\n",z);
}else{
printf("最后三位数为:0%d\n",z);
}
return 0;
}
最后,我们应该可以发现一个问题,那就是每次计算之时始终保持数字为一个三位数的状态就是最后三位。取模的结果相乘并不影响最后的结果,应该是可信的。如果谁能附上证明最好。
看一遍代码就差不多弄明白了
厉害哦
看上去也不难,就是想不到
这算法看起来简直太头疼了。
这是什么,不明白啊
这么美好的一天,为何要出数学题呢。
是么,相对比较美好吧
来访~
欢迎
这个什么样的数学题目啊,没有看明白,只知道好像很难。
确实是好像,不过真不难吧
就要最后三位啊?
是的,最后三位。不多不少
很纠结的一个算法。
也还好,比想象中的稍微难点而已
恩 额恩呢
我怎么没看明白
我到现在还是不明白,自己动手算算才是能清楚点
这道数学题今天第一次见。
见到总比没见到好
这是多大个数啊!!!
不知道,随手写的一个
数学一直差的要命。。。
谁不是呢
如看天书啊,数学本来就没学好的。
也不是吧,这个和数学没多大关系
还是有关系的