2015-10-13 85 views
6

我開始自己學習C++,而且我正在嘗試完成一個任務,我感到困惑。只要用戶輸入0,用戶就可以輸入自然數。之後,我的程序應該找到輸入的最大數字總和並將其打印出來。它也應該打印出一個數字,從中得出結論。 這裏是我試圖做的:拆分一個整數並找到最大的總和C++

#include <iostream> 
#include <string> 
using namespace std; 

int main() 
{ 
    int input = 0; 
    int digit; 
    int sum = 0; 
    int largest = 0; 

    do 
    { 
     cout << "enter a natural number (0 if done): " << flush; 
     cin >> input; 

     while (input > 0) 
     { 
      digit = input % 10; 
      sum = sum + digit; 
      input = input/10; 
     } 
     if (sum > largest) 
      largest = sum; 

    } while (input); 

    cout << "Max sum of digits was " << largest << "for" << endl; 
} 

當我運行它計數僅在數第一類型的,並且停止工作的數字總和PROGRAMM。當我將while (input > 0)帶走時,它會形成一個循環,但不計數。 我將非常感謝您的幫助和解釋。 P.S.對不起,我的英語,我不是母語的人。

+0

什麼是「摘要總和」? – deviantfan

+0

抱歉,數字總和 –

+0

當你退出'while(input> 0)'循環時,'input == 0'(因爲上一次迭代的'input = input/10;'將返回0)。因此,當你敲(}輸入);'條件爲'假'時,你從第一次迭代中的外部'do {..} while'循環中斷。這就是爲什麼你只能得到'1'迭代。 – 865719

回答

2

你似乎有此三個問題:

1 - 您正在嘗試使用一個變量使y歐基本設置爲零在while循環

2 - 你似乎在尋找的輸入端,是最大的總和

3 - 你是不是對每個輸入重置總和變量

的第一個問題的解決方案是在修改輸入並將該變量用於while循環之前將輸入「備份」到另一個變量中。

這也可以讓你得到最大的數字輸入和存儲它。

int input = 0; 
int inputBackup = 0; 
int digit; 
int sum = 0; 
int largest = 0; 
int largestInput = 0; 

要在inputBackup變量添加,把它放在cin後。

然後設置largestInput在您的sum > largest if語句來設置largestInput如果它是最大的。

cout << "enter a natural number (0 if done): " << flush; 
cin >> input; 

inputBackup = input;// This line 
sum = 0;   // and this line 

while (input > 0) 
{ 
    digit = input % 10; 
    sum = sum + digit; 
    input = input/10; 
} 
if (sum > largest) 
{ 
    largest = sum; 
    largestInput = inputBackup;// Store largest input 
} 

然後改變while(input)while(inputBackup)檢查inputBackup變量而不是一個input的。

更改cout是這樣的largestInput變量添加進去

cout << "Max sum of digits was " << largest << " for " << largestInput << endl; 

而且你的代碼應該是固定的!

快樂編碼!

+0

這太棒了!謝謝你) –

+0

沒問題!我剛剛看到你在這個問題上似乎有更多的問題,而不是你剛纔所說的最初問題 – Elipzer

2
do 
{ 
    cout << "enter a natural number (0 if done): " << flush; 
    cin >> input; 
    //more code 
} while (input); 

爲了使這項工作正常,input可能不是cin和循環狀態之間切換。

while (input > 0) { 
    digit = input % 10; 
    sum = sum + digit; 
    input = input/10; 
} 

不會改變input

的東西代替它像

int input2 = input; 
while (input2 > 0) { 
    digit = input2 % 10; 
    sum = sum + digit; 
    input2 = input2/10; 
} 
+0

它計算所有數字的總和,但我仍然需要輸入的每個數字的總和:( –

1

嘗試,而不是

如果我們不爲零sum價值,它積累的所有輸入數字和金額之和總是比超過largest值時,因爲它存儲當前值數字的largest + sum。因此,如果我們將sum的值設置爲零,它只包含當前輸入的數字的總和,並且可以比前一個更簡單,至少是largest

#include <iostream> 
#include <conio.h> 

using namespace std; 



int main() { 

    int input = 0; 
    int digit; 
    int sum = 0; 
    int largest = 0; 

    do 
    { 
     while (input > 0) { 
      digit = input % 10; 
      sum = sum + digit; 
      input = input/10; 
      } 
       if (sum > largest) 
        largest = sum; 

     sum = 0; // set to 0 current sum 

     cout << "enter a natural number (0 if done): " << flush; 
     cin >> input; 

    } while (input); 

    cout << "Max sum of digits was " << largest << " for" << endl; 

    _getch(); 

    return 0; 
} 
+0

)您可以簡單地將輸入代碼替換爲循環結尾,它會正常工作,因爲您將輸入變量初始化爲0,並且因爲你的內循環將被忽略 – Mykola

+1

它工作得更好,但不是我需要的方式,現在它計算所有鍵入數字的總和,但我需要每個數字的數字總和,然後,程序應該選擇最大的數額,也許你可以推薦如何做到這一點? –

+0

現在它必須正常工作 – Mykola

1

在這一部分:

while (input > 0) { 
    digit = input % 10; 
    sum = sum + digit; 
    input = input/10; 
} 

而輸入不爲零,它會重複,所以當走出迴路輸入的值是0。使用一個輔助變量或附上該代碼功能:

int getDigitsSum(int input) { 
     while (input > 0) { 
     digit = input % 10; 
     sum = sum + digit; 
     input = input/10; 
     } 
     return sum; 
} 
+0

你忘了回報金額 – Mykola

+0

這是真的,謝謝你Mykola! –

相關問題