2017-07-14 101 views
-5

我想找到一個數字中的尾隨零數,所以我做了下面的代碼。它對某些數字運行良好,但對於更大的數字,它開始顯示異常。就像當我輸入數字「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? –

回答

-2

在這裏,我給你一個非常簡單的代碼,用於提取單個數字 和任何數量的計算類型。

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一樣訪問數字。無需剩餘人員或部門。 –

3

浮點數的精度有限。通常,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。這樣你就可以像你喜歡的那樣處理大數字。