中国有机产品认证:我有一道C语言的题不会做,谁能帮帮我!!!!

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/11 05:46:58
它的题目是这样的:
求X的Y次方的最后三位数(10 < x, y < 1000)
如13的13次方的最后三位数为253
如15的20次方的最后三位数为625
如67的210次方的最后三位数为449

int LastThree(int x, int y);
输入参数x,y, 返回X的Y次方的最后三位数。
保证输入的数字有效。
(main函数部份我这不说了)
我是调用这个函数求X的Y次方的最后三位数的
int a(int x,int y)
{
int z=1;
int i;
for(i=1;i<=y;i++)
{
z=z*x;
}
return(z%1000);

但我怎么也得不到正确答案
问题是出在哪里?????
请给我一个正确的函数好吗???

很好做.
你只要每次迭代之后做一次取模(%1000)运算就行了.例如:13的13次幂
第一次:
(13*13)%1000=169
第二次
(169*13)%1000=197
第三次:
(197*13)%1000=561
如此反复12次
得到的最后三为数就是结果了!
用int型的就行,不用考虑越界问题!

int类型的数字上限是65535你输入的这个x,y值经过运算后很有可能就超出了这个范围。
第一就是把你的变量类型换成long
第二个方法就是改算法,取成方之后的后三位,也就是说只要后三位数,那么两个数字相乘的时候,只有这两个数字的后三位数来影响你相乘的结果。因此,你可以在每次循环的时候来判断这个相乘数字的位数,每次循环都把它只留后三位,然后相乘,再留后三位,这样循环接诉后就直接print就是你要的了

对啊。
只要每次成方的后3位数就行了。
因为后3位乘以3位是6位。
然后再取后3位。
6位的数还是用long 吧

你的return z%1000
看到的那是后三位嘛