这是一个查找位数的程序。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main() {
int i = 0, n;
printf("Enter number: ");
scanf("%d", &n);
while ((n / pow(10, i)) != 0) {
i++;
}
printf("%d", i);
}
该程序在任何输入上都给出 309
作为输出(i
的值)。但是,如果我将 pow(10, i) 的值存储在另一个变量中并将其放入 while 循环中,我会得到正确的输出。请帮忙!
最佳答案
C++ 在进行计算或求值时使用最精确的类型(当类型混合时),在这里您可以有效地将 double 与 int 混合。您正在将用户输入的数字除以一个非常大的指数数。
理论上,无论除数有多大,它永远不会为零。所以,理论上的结果应该是无限的。然而,由于 double (由 pow 返回)的限制,它最终仍将接近于零。
如果将 pow 的返回值存储在整数中,您将不再混合类型,并且将有效地计算出位数或以 10 为底的近似对数(任何整数除以更大的整数将等于零) )。
关于C - pow 函数意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35394322/