这是问题:给出一个数N,问N能否能表示成某个正整数X的K次幂(K>1),N可能有多种表示方法,请找出最大的X并输出相应的K。例如 16=2^4=4^2,64=4^3=2^6=8^2则16应表示为4^2,64应表示为8^2。
解答:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
while (1)
{
int n, x, k;
cin >> n;
if (n == 0) break;
for (x = n – 1; x>1; x–)
{
for (k = 2; pow(x, k)<n; k++)
{
}
if (pow(x, k) == n) break;
}
if (x == 1)
cout << 0 << ” ” << 0;
else
cout << x << ” ” << k << endl;
}
}
在codeblock中输入4,8等一些数字正常,输入27 ,100等数字输出0 0;
在VS2015中输入27,100分别输出3,3 ,10 2正常…
解答:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
while (1)
{
int n, x, k;
cin >> n;
if (n == 0) break;
for (x = n – 1; x>1; x–)
{
for (k = 2; pow(x, k)<n; k++)
{
}
if (pow(x, k) == n) break;
}
if (x == 1)
cout << 0 << ” ” << 0;
else
cout << x << ” ” << k << endl;
}
}
在codeblock中输入4,8等一些数字正常,输入27 ,100等数字输出0 0;
在VS2015中输入27,100分别输出3,3 ,10 2正常…
解决方案
10
Pow函数,不知道能不能正确的求出结果,原因是这是个参数和返回值,都是浮点类型的函数
至少第一个参数和返回值浮点类型的
至少第一个参数和返回值浮点类型的
40
应该是pow函数引起的。
你的codeblock调用的应该是浮点数的pow版本,也就是说返回值是浮点型,和int进行==比较。
由于浮点数存在精度误差,所以一直无法满足pow(x, k) == n
你改成
你的codeblock调用的应该是浮点数的pow版本,也就是说返回值是浮点型,和int进行==比较。
由于浮点数存在精度误差,所以一直无法满足pow(x, k) == n
你改成
if(abs(pow(x, k) - n) < 0.0001)
试试
20
1、不同平台下pow函数实现可能不同
2、浮点数计算是有误差的
2、浮点数计算是有误差的