题目:

一个整数N,|N| >= 2, 如果存在整数x,使得N = x * x * x... (p个x相乘) =x^p,则称N是p次方数,给定32位内的整数N,求最大的P。例如N=5,输出1,N=36则输出2。

分析:

其实我是水过的。X从2到sqrt(N)便利,如果res=logN/logX在容许误差内就返回(int)(res+0.5).

注意:

1.输入为2147483648。

2.输入为负数时候。得到的(int)(res+0.5)要是奇数才返回,不然返回1(很明显)。

3.容差要足够小。

最后:

祝大家轻松水过。

过了好长一段时间了,贴上代码吧。

  1. /*******************************************************************************/
  2. /* OS : 3.2.0-58-generic #88-Ubuntu SMP Tue Dec 3 UTC 2013 GNU/Linux
  3. * Compiler : g++ (GCC) 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
  4. * Encoding : UTF8
  5. * All Rights Reserved by yaolong.
  6. *****************************************************************************/
  7. /* Description:给定N(可能为负数),求最大的p满足pow(x,p)=N,x可能为负数
  8. ***************************************************************
  9. *****************************************************************************/
  10. /* Analysis: 从N=2到sqrt(N)遍历,允许容差控制在0.00000000001,在32位数中
  11. 总是能正确******
  12. 状态:通过。
  13. 测评网址:http://hero.csdn.net/Question/Details?ID=299&ExamID=294
  14. ***********************************************************/
  15. /*****************************************************************************/
  16. //*
  17. #include <stdio.h>
  18. #include <iostream>
  19. #include <string>
  20. #include <cmath>
  21. using namespace std;
  22. #define RC 0.00000000001
  23. #define MAX_INT 2147483648
  24. int isF(double t)
  25. {
  26. //四舍五入
  27. int near_res=(int) (t+0.5);
  28.  
  29. //允许误差
  30. if(abs(near_res-t)<RC)
  31. {
  32. return near_res;
  33. }
  34.  
  35. return -1;
  36.  
  37. }
  38. class Test
  39. {
  40. public:
  41. static int give (int n)
  42. {
  43.  
  44. bool _f=true;
  45. if(n<0)
  46. {
  47. _f=false; //是负数,因为负数的话,所得指数必须是奇数。
  48. }
  49. //边界2147483648
  50. if(n==MAX_INT)
  51. return 31;
  52.  
  53. long long int num=abs(n);//取绝对值
  54. double sqrtn=sqrt(num*1.0);//避免多次的开根,取对数
  55. double logN=log((double)(num));
  56.  
  57. for(int i=2; i<=sqrtn; i++)
  58. {
  59. double tmp=logN/log(1.0*i);
  60. int res=isF(tmp);
  61. if(-1!=res)
  62. {
  63.  
  64. if(!_f) //为负数
  65. {
  66. if(res%2==1)
  67. return res;
  68.  
  69. }
  70. else
  71. {
  72. //为正数
  73. return res;
  74. }
  75. }
  76. }
  77. return 1;
  78.  
  79. }
  80. };
  81.  
  82. //start 提示:自动阅卷起始唯一标识,请勿删除或增加。
  83. int main()
  84. {
  85. int n;
  86. cout<<Test::give(2147483648)<<endl;
  87. while(cin>>n&&n) //测试数据
  88. cout<<Test::give(n)<<endl;
  89.  
  90. return 0;
  91. }
  92. //end //提示:自动阅卷结束唯一标识,请勿删除或增加。

P次方数 英雄会 csdn 高校俱乐部的更多相关文章

  1. 朋友的礼物(英雄会,csdn,高校俱乐部)信封问题,匹配模型

    前言: 首先这是一题解,但是重点最代码之后,有耐心的可以直接从代码后看. 上题目:n个人,每个人都有一件礼物想送给他人,他们决定把礼物混在一起,然后每个人随机拿走一件,问恰好有m个人拿到的礼物恰好是自 ...

  2. CSDN 高校俱乐部: 排列搜索

    CSDN 高校俱乐部/英雄会 题目: 设数组a包含n个元素恰好是0..n - 1的一个排列,给定b[0],b[1],b[2],b[3]问有多少个0..n-1的排列a,满足(a[a[b[0]]]*b[0 ...

  3. CSDN高校俱乐部2013年秋季北京地区第一站“编程语言的应用及其发展”—北京联合大学

    2013年12月11日晚17:00.CSDN高校俱乐2013年秋季北京地区第一站“编程语言的应用及其发展”在北京联合大学进行. 首先,CSDN总部人员介绍CSDN俱乐部的改版以及线上编程挑战赛.CSD ...

  4. (csdn高校俱乐部编程挑战)2的补码

    题目详情 在计算机中,整数是以2的补码的形式给出的. 给出整数A和B,如果计算机是32位机.求从A到B之间的全部二进制数中,一共用了多少个1. 输入格式: 多组数据,每组数据一行,由两个整数A,B, ...

  5. CSDN高校俱乐部第二届战神杯第二题题解

    两个人玩一个数字游戏,给定两个正整数A,B,两个人轮流从一个数中减去另外一个数的正数倍.要保证结果非负, 首先得到0的人获胜. 比如:30 8经过一步操作能够变为22 8 或者14 8 或者 6 8. ...

  6. N的N次方(高校俱乐部)

    最近一直在刷字符串和线段树,也越来越少玩高校俱乐部,无聊看到一题N的N次方的问题,脑海中各种打表就涌现出来了. 弄了不一会儿,就写完了,马上提交,但是系统好像出了问题,提示"哦哦,出了点状况 ...

  7. [LeetCode] Power of Four 判断4的次方数

    Given an integer (signed 32 bits), write a function to check whether it is a power of 4. Example: Gi ...

  8. [LeetCode] Power of Three 判断3的次方数

    Given an integer, write a function to determine if it is a power of three. Follow up:Could you do it ...

  9. [LeetCode] Power of Two 判断2的次方数

    Given an integer, write a function to determine if it is a power of two. Hint: Could you solve it in ...

随机推荐

  1. jQuery获取和设置disabled属性、背景图片路径

    之前对于这个独特的disabled属性获取和设置很混乱,今天项目中用到了,用attr不能实现,于是多次试验得出: 获取disabled属性用prop $("#basic_key") ...

  2. bzoj 3531 [Sdoi2014]旅行(树链剖分,线段树)

    3531: [Sdoi2014]旅行 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 876  Solved: 446[Submit][Status][ ...

  3. C语言 处理文件

    刚学习C语言不久,运用C语言处理各种文件.这里列出,处理文件所需的大部分函数,已经整理的笔记,使用的注意事项.

  4. jquery.qrcode.min.js生成二维码 通过前端实现二维码生成

    主体代码: <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <tit ...

  5. TimeSpan XML序列化

    /// <summary> /// 刷新时间 默认为1秒 /// </summary> /// <value>The refresh time.</value ...

  6. ASP.NET MVC- VIEW Creating Custom HTML Helpers Part 2

    The goal of this tutorial is to demonstrate how you can create custom HTML Helpers     that you can ...

  7. mysql技术调优资料整理

    1,15 个有用的 MySQL/MariaDB 性能调整和优化技巧 2,MariaDB设置主从复制 3,CentOS6.4安装mysql2redis        http://www.cnblogs ...

  8. 【转】android错误 aapt.exe已停止工作的解决方法

    http://www.jb51.net/article/57420.htm 在使用eclipse进行安卓java的编程的时候,有时候我们会遇到这样的问题:那就是无故弹出aapt.exe停止工作的提示, ...

  9. poj 3140 Contestants Division(树形dp? dfs计数+枚举)

    本文出自   http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...

  10. linux文件的隐藏属性:chattr

    1. 文件的隐藏属性 linux除了9个权限外,还有些隐藏属性, 使用chattr命令来设置. 使用方法: $ chattr +-=[ASacDdIijsTtu] + : 添加一个特殊參数 - :   ...