2015-05-05 86 views
2

我要讓符合此規則的程序:鑑於來自用戶的輸入「N」計數幸運數字 - C++

,你需要找到1中所有的幸運數字爲n。幸運數字是那些有4或7或兩者都是他們的數字。

我做了這個,但不能管理如何做到這一點的數字比10

#include<iostream> 

using namespace std; 

int main() 
{ 
    int digits, n, count=0; 
    cout << "Enter upper limit: "; 
    cin >> n; 

    for (int i=0; i<n; i++){ 
     if((i==4) || (i==7)){ 
      count++; 
     } 
    } 
    cout << "Number of lucky numbers in given range is " << count; 

    return 0; 
} 

回答

8

格式更大的整數轉換成字符串。然後,測試所需字符的字符串。

紅利方法(整數):您可以使用對數,除法,模數,減法等來遍歷並測試每個數字。

+0

這是聰明的想法。 –

+2

這甚至沒有回答這個問題,但它有upvotes。 Rawr – Poriferous

1

@Steven的方法是非常好的,但你也可以將你的輸入替換爲char數組而不是int,並使用cin::getline函數。

int main() 
{ 
    int n; 
    int count = 0; 

    cout << "Enter upper limit: "; 
    cin >> n; 

    for (int i = 1; i <= n; i++) 
    { 
     char szBuffer[100]; 
     sprintf_s(szBuffer, "%d", i); 
     if (strstr(szBuffer,"4") != NULL || strstr(szBuffer,"7") != NULL) 
     { 
      count++; 
     } 
    } 
    cout << "Number of lucky numbers in given range is " << count; 

    return 0; 
} 
+0

不適用於我,上限爲10時顯示0,爲14時顯示1.您知道爲什麼嗎? – qwerasdzxc

+1

@qwerasdzxc因爲此代碼只計算給定n中的4和7,而不是1到n中的所有數字。 – TobiMcNamobi

+0

@qwerasdzxc我修改了我的答案:) –

0

我現在正在做這個練習。我把你的初步設想,並加以擴展,得到以下(代替你的for循環插入):

for (int i=0; i<=n; i++){ 
     int j = i; 
     while(j > 1) { 
      if((j % 10 == 4 || j % 10 == 7)) { 
       count++; 
       break; 
      } 
      j = j/10; 
     } 
    } 

這似乎得到預期的答案。然而,當試圖檢查解決方案時,該網站聲稱,結果是錯誤的n = 74(它聲稱正確的答案是15,但手動計數,我很確定它是27,這也是這個代碼返回) 。我沒有弄清楚我做錯了什麼,所以我試圖在網站上登錄一張票。

+0

我剛剛登錄了一個提供練習網站的問題,他們似乎已經確認我的解決方案是正確的,並已相應地調整了他們的檢查。我想我的答案已經過了很多時間,我的答案已經對你有用了,但是,謝謝你激勵我如何制定解決方案。 – Dan