找到一个数字中的尾随零数

问题描述:

我想找到一个数字中的尾随零数,所以我做了下面的代码。它对某些数字运行良好,但对于更大的数字,它开始显示异常。就像当我输入数字“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; 
} 
+4

BTW'n'未初始化。 –

+9

如果我是你,我会把这个数字读入一个'std :: string'中,并从该字符串的末尾开始计算零。 – NathanOliver

+1

'float'的精度有限。您可能会丢掉最后一位数字。 1.2345678E7有多少个0? –

在这里,我给你一个非常简单的代码,用于提取单个数字 和任何数量的计算类型。

int countZero(int x){ 
    int t = x; 
    int s = 0; 
    while(t > 0){ 
     if(t %10 == 0){ 
     s++; 
      } 
    t = t/10; 
    } 
    return s; 
} 
+1

这个解决方案最终会产生与OP相同的问题,如果你一直向输入添加数字,它最终会失败。另外,问题在于询问他的例子中的错误。提供替代解决方案无助于解决问题。 –

+0

如果您将该号码作为字符串,则可以像数字[i] == 0一样访问数字。无需剩余人员或部门。 –

浮点数的精度有限。通常,float是一个32位的数字,double是一个64位的数字。如果数字小于或等于16777216(即2^24),Float可以精确地存储整数。

所以,当123456789被读入一个浮点型变量时,将有一个不同的值,它变成123456792.在这一点上,没有理由计算尾随零。

如果double小于或等于9007199254740992(2^53),则可以精确地存储整数。

unsigned long long int可以存储小于2^64的整数。如果您选择这种方式,请使用以下条件来检查尾随零:if (number%10==0)

如果您只想计算尾随零,并且仅此而已,那么请改用std::string。这样你就可以像你喜欢的那样处理大数字。