我想在一个数字中找到尾随零的数量,所以我做了以下代码。它适用于某些数字但是对于更大的数字它开始显示异常。就像当我输入数字“12345678”时,它显示零0,这是正确的,但当我输入“123456789”时,它显示一个零,我的代码中可能出现的错误是什么?
#include<iostream>
#include<math.h>
using namespace std;
int main(){
int n = 0;
float s;
cin>>s; //the number to be given as input
for(int j = 0;j <100;j++){
s = s/10;
if(s == floor(s)){
n++;
}else{
break;
}
}
cout<<n<<endl;
return 0;
}
答案 0 :(得分:3)
浮点数的精度有限。通常,float是32位数字,double是64位数字。如果数字小于或等于16777216(即2 ^ 24),Float可以精确存储整数。
因此,当123456789被读入float变量时,将具有不同的值,它将变为123456792.此时,没有理由计算尾随零。
Double可以精确存储整数,如果它小于或等于9007199254740992(2 ^ 53)。
unsigned long long int
可以存储小于2 ^ 64的整数。如果选择这种方式,请使用此条件检查尾随零:if (number%10==0)
如果您只想计算尾随零,那就是全部,然后使用std::string
代替。通过这种方式,您可以根据需要处理大数字。