uva oj 上的一题. 113 - Power of Cryptography
就是给个 n 1<=n<=200 和 p 1<=p<10^101求个 k 1<=k<=10^9 使得k^n=p.
一开始看到p竟然和这么大个,傻不拉几地想到用高精度表示,我去,还真写上了代码.......但是那里出了问题,小一点的数测试可以,数大了好像死循环了........
然后看其他人怎么解的,看到了浮点型表示及范围,还有个pow()函数,这些其实不太懂,就学习了.......其实感觉学到了不少(我想是自己知道的太少吧!)
1.十进制小数和二进制的互换. http://www.cnblogs.com/xkfz007/articles/2590472.html
2.计算机中浮点数的表示.http://zhan.renren.com/programming4idiots?gid=3602888498026486936&checked=true 还有http://blog.sina.com.cn/s/blog_5fb3f1250100xodv.html
3.浮点数的范围.http://haipeng31.blog.163.com/blog/static/1056233442010112732014486/
这样差不多理解了浮点数了.
所以p完全可以用double来存而不是用麻烦的高精度.
4.pow()函数.http://baike.baidu.com/view/114061.htm
既然有现成的函数,那么.....呵呵.
下面是看到别人的代码,大神,不解释.
#include <stdio.h> #include <math.h> int main(void) { int n; double p; while (scanf("%d %lf",&n,&p)!=EOF) { printf("%d\n",(int)(pow(p,1.0/n)+0.5)); //加个0.5应该是四舍五入 } return 0; }