请教一个C语言的问题
@学PHP的小蚂蚁 你好,想跟你请教个问题:
1. 输入n(正整数,2位数),计算n的n次方的后3位数字。
#include <stdio.h>
#include <math.h>
main()
{
int n=0, a, b, c;
float z=0;
printf("请输入一个两位整数:n");
scanf("%d", &n);
z = pow (n,n);
a = z/100%10;
b = z/10%10;
c = z%10;
printf("%lfn", z);
printf("%d%d%d",a,b,c);
return 0;
}
这是我编的一个代码,我想请教的是后三位的那个问题怎么解决,我的abc三个用z不能整除的?
谢谢!!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(17)
这就是我之前说的大数运算,里面实际算法比较复杂
这个输入16以上就都是000了
回复
get intput is :16 cacul result is:18446744073709551616.000000 get str is:18446744073709551616.000000 without point . is:18446744073709551616 point . index is:20 last three value is:616
回复
我这边运行正常的啊,
回复
我刚运行了下,我这个程序输入16是正常的,但是输入17就计算的不准确了,我也不知道为什么...
这题就不能用pow,数值太大了
回复
题目只要最后三位,高位溢出就溢出呗。如果真要把所有值都算出来,只能用大数运算了,复杂度和这个不是一个级别的。
回复
为什么我运行你这个程序不对呢?你输入一个10 试下
结果是000,没打全
回复
已经修改好了
回复
恩,现在是对的. 我用java也计算了下,结果和你的是一样的.你能看看我写的,为什么输入17开始就计算的不准确了呢?
有道理
您好!谢谢您的回答。不过这个程序在我这只能运行11,还有while里面的东西我没懂什么意思?
z是一个float类型的数,其与int型的数运算的结果还是float型。而float类型不能求余。
试试下面的代码,是基于你的改的,效率比较低一点