这是一个查找位数的程序。
这是我的代码:
#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循环中,我会得到正确的输出。请帮忙!
答案 0 :(得分:1)
在进行计算或评估时,C ++使用最精确的类型(当混合类型时),并且在这里有效地将double与int混合。您将用户输入数字除以非常大的指数数字。
这在理论上永远不会为零,无论除数有多大。因此,理论结果应该是无限的。但是,由于double的限制(由pow返回),它最终仍将接近零。
如果以整数存储pow的返回值,您将不再是混合类型,并且将有效地计算出数字的位数或近似的对数基数10(任何整数除以更大的整数将等于零) )。
答案 1 :(得分:0)
变化:
while( ( n / pow(10,i) )!=0 ){
要:
while( ( n / pow(10,i) ) >= 1 ){
pow返回double,因此完整结果为double,小数部分将始终为非零,直到用完指数可能值为309(转换为十进制,二进制为1024)。