我在用 C 语言实现给定算法时偶然发现了一个问题:
int getNumberOfAllFactors(int number) {
int counter = 0;
double sqrt_num = sqrt(number);
for (int i = 1; i <= sqrt_num; i++) {
if ( number % i == 0) {
counter = counter + 2;
}
}
if (number == sqrt_num * sqrt_num)
counter--;
return counter;
}
– 第二个条件的原因 – 是对完全平方进行校正(即 36 = 6 * 6),但是它不会避免像这样的情况(误报):
sqrt(91) = 18.027756377319946
18.027756377319946 * 18.027756377319946 = 91.0
所以我的问题是:如何避免它以及 C 语言中确定双数是否有小数点后任何数字的最佳方法是什么?我应该将平方根值从 double 转换为整数吗?
最佳答案
在你的情况下,你可以这样测试它:
if (sqrt_num == (int)sqrt_num)
关于c - 如何在C中找出一个双数是否有小数点后的任何数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37129840/