如何解决Floor 没有在 C++ 中返回正确的值
我正在尝试一个关于 SPOJ 的问题,其中要求我预先计算 Cube Root。我通过二进制搜索方法接近,但在检查是否给出否时我得到了错误的答案。是整数或双精度。
我关注了这个
if (ceil(num) == floor (num)) //integer
但是我在楼层 (num) 中得到了错误的答案,
例如:27 (楼层 = 2,ceil = 3),125 (楼层 = 4,ceil = 5)
这是代码。
#include <iostream>
#include <iomanip>
#include <cmath>
#include <vector>
#define Size 1000001
//vector for storing positions
std::vector<int> pos;
//function for calculating cube root
double cubeRoot(int n) {
double low = 0;
double high = (double)n;
for (int i = 0; i < 50; ++i) {
double mid = (low + (high - low) / 2.0);
if (mid * mid * mid > n) high = mid;
else low = mid;
}
//std::cout << " low : " << low << ",high : " << high << '\n';
return low;
}
int main () {
std::ios_base::sync_with_stdio(0);
std::cout.tie(0);
std::cin.tie(0);
//resized according to the question requirement
pos.resize(Size,0);
pos[1] = 1;
int currentPosition = 2; //variable to store the current position.
for (int i = 2; i <= Size; i++) {
double ans = cubeRoot(i);
//std::cout << i << ' ' << std::setprecision (10) << ans << ' ' << floor(ans) << ' ' << ceil(ans) << '\n';
if (ceil (cubeRoot(i)) == floor (cubeRoot(i))) {
pos[i] = -1;
currentPosition --;
}
else {
pos[i] = 1 + currentPosition;
currentPosition ++;
}
}
int testCase;
std::cin >> testCase;
for (int test = 1; test <= testCase; ++test) {
int num;
std::cin >> num;
//Output format
std::cout << "Case " << test << ": ";
if (pos[num] == -1) std::cout << "Not Cube Free\n";
else std::cout << pos[num] << '\n';
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。