2013-10-09 34 views
1

正如標題所說,我必須找出給定數字中的位數。這裏是我的代碼,這使我的0的結果,當數必須高於10 編程在Visual Studio Pro的2012C++中的數字計數器

代碼:

#include <iostream> 
using namespace std; 

int main() 
{ 
    int g, count=0; 

    cout << "Enter the number" << endl; 
    cin >> g; 

    while (g > 0) 
    { 
     count = count +1; 
     g = g/10; 
    } 
    cout << count << endl; 

    system ("pause"); 
    return 0; 
} 
+2

提示:'std :: log10' – chris

+0

謝謝克里斯,但我剛開始學習C++。你能解釋一下這是怎麼完成的嗎? – user2834298

+0

什麼讓你相信循環條件應該是'(g> 0 && g <= 10)'?它應該更簡單! –

回答

1

如果G> 10,然後

(g > 0 && g<=10)是假的。

3

你有沒有做任何調試?

你認爲g值是多少會使這個條件成立嗎?

(g > 0 && g <= 10) 

這應該足以讓你找出問題所在。

0

此代碼將重現位數。

#include <iostream> 

using namespace std; 
int main() 
{ 
    int g, count=0; 
    cout << "Enter the number" << endl; 
    cin >> g; 
    while (g > 0) 
    { 
     count = count +1; 
     g /= 10; 
    } 
    cout << count << endl; 
    return 0; 
} 

在這旁邊,還有另一種方式來解決這個問題

#include <iostream> 
#include <cmath> 

using namespace std; 
int main() 
{ 
    int g, count=0; 
    cout << "Enter the number" << endl; 
    cin >> g; 
    count = (int)(log10((double)g)); 
    if (g == 0) 
     count = 0; 
    cout << count + 1 << endl; 
    return 0; 
} 
+0

問題#1:用戶輸入-100。問題#2:用戶輸入2150000000. – SigTerm

+0

第二種解決方案:在負數上返回無效結果,並在正數上返回無效結果。輸入「9」,看看會發生什麼。 – SigTerm

+0

'(int)(log10((double)g));'是錯的。嘗試'g = 999'。 – Nawaz

0

如果你真的想用一個循環這(一日誌10呼叫可以做的工作),使用這樣的(未測試):

for (count=0;g>0;g/=10,count++) {} 

這幾乎是你寫的一樣,但沒有g<10 -condition。

0

首先將字符串轉換爲int然後嘗試查找其長度,這有點麻煩。你爲什麼不看一下弦呢?

#include <iostream> 
#include <string> 

int main() 
{ 
    std::cout << "Enter the number" << std::endl; 

    std::string g; 
    std::cin >> g; 

    std::cout << g.size() << "\n"; 
} 

注意:這不會削減前導零;我把這個留給你。