找到一个数字中的尾随零数
我想找到一个数字中的尾随零数,所以我做了下面的代码。它对某些数字运行良好,但对于更大的数字,它开始显示异常。就像当我输入数字“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;
}
在这里,我给你一个非常简单的代码,用于提取单个数字 和任何数量的计算类型。
int countZero(int x){
int t = x;
int s = 0;
while(t > 0){
if(t %10 == 0){
s++;
}
t = t/10;
}
return s;
}
这个解决方案最终会产生与OP相同的问题,如果你一直向输入添加数字,它最终会失败。另外,问题在于询问他的例子中的错误。提供替代解决方案无助于解决问题。 –
如果您将该号码作为字符串,则可以像数字[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
。这样你就可以像你喜欢的那样处理大数字。
BTW'n'未初始化。 –
如果我是你,我会把这个数字读入一个'std :: string'中,并从该字符串的末尾开始计算零。 – NathanOliver
'float'的精度有限。您可能会丢掉最后一位数字。 1.2345678E7有多少个0? –