2016-08-31 13 views
-2

コンソール出力は私の大きな関心事です。これはプログラム全体です。私はコンソール出力を一番下に掲示します。出力は私がプログラムに入力したものを示しています。数字が奇妙に変わったのをすぐに見ることができます。それらは負の数または多分ハイフンを得る。奇数は、底部付近の「+」記号の上下にあります。私は2つの入力を追加し、それらが正しく表示されるようにしたいと思います。できるだけ手助けをしてください。たとえそれが私の新しい投稿方法を批判しているとしても。100桁までの数値加算プログラム。奇数コンソール出力

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

void readBig(int[]); 
void printBig(int[]); 
void addBig(int[], int[], int[]); 

const int MAX_DIGITS = 100; 

int main() 
{ 
    int number1[MAX_DIGITS]={}, number2[MAX_DIGITS]={}, sum[MAX_DIGITS]={}; 
    bool finished = false; 
    char response; 
    while (! finished) 
    { 
     cout << "Please enter a number up to " << MAX_DIGITS << " digits: "; 
     readBig(number1); 
     cout << "Please enter a number up to " << MAX_DIGITS << " digits: "; 
     readBig(number2); 
     addBig(number1, number2, sum); 
     printBig(number1); 
     cout << "\n+\n"; 
     printBig(number2); 
     cout << "\n=\n"; 
     printBig(sum); 
     cout << "\n"; 
     cout << "test again?"; 
     cin >> response; 
     cin.ignore(900,'\n'); 
     finished = toupper(response) != 'Y'; 
    } 
    return 0; 
} 

void readBig(int number[MAX_DIGITS]) // This function below will read an input number //as a string then input that into an array. 
{ 
    string read; 
    cin >> read; 

    for (int i = 0; i < MAX_DIGITS && i <= read.length() + 1; i++) { 

     number[i] = int (read[i] - '0'); 
    } 
} 

// This function below will display the number. 
void printBig(int number[MAX_DIGITS]) 
{ 
    int digit = 0; // first val counter 

    for (int i=0; i<=MAX_DIGITS; i++) 

    if (number[i] == 0 && digit >= 1) cout << ""; // clears leading zeros 
    // and checks for placeholder zeros 

    else cout << number[i]; digit++; // else print val and check 
    // for beginning of number. 
} 

void addBig(int number1[MAX_DIGITS], int number2[MAX_DIGITS], int sum[MAX_DIGITS]) 
    // The code below sums the arrays. 
{ 
    for (int i = 0; i < MAX_DIGITS; i++) { 
     sum[i] = number1[i] + number2[i]; 
    } 
    for (int j = 0; j < MAX_DIGITS; j++){ 
     if (sum[j]/10 > 0) { sum[j + 1] += 1; } 
     if (sum[j]/10 > 0) { sum[j] = sum[j]/10; } // EDIT:I would like both to happen 
    } 
} 

コンソール出力

Please enter a number up to 100 digits: 987654321 
    Please enter a number up to 100 digits: 987654321 
    987654321-48-483 
+ 
    987654321-48-489 
= 
    11111-9-99 
    test again? 

    Please enter a number up to 100 digits: 444444444 
    Please enter a number up to 100 digits: 444666644 
    444444444-48-483 
+ 
    444666644-48-484 
= 
    01111-9-94 
    test again? 

私は実際に出力を考え出すといくつかの助けをしたいと思いますが、任意の提案は素晴らしい:)だろう!

+0

あなたは出力を把握するために何を望んでいますか?あなたの質問をより明確にして、膨大なコードブロックを読む前に、どんな問題が起きているかを誰かが知ることができるようにしてください。 – PolyMesh

+0

下部の出力。プログラムの実行には2つの試みがありますが、このように見える奇数のコンボを持つ4行があります。 03-48-486532彼らは十数が持ち越された標準的な数字であると考えられています。 – Joeybreh

+0

このコードを見ると、私は助けが必要な多くの書式を見ています。コードを適切に書式設定すると、目がより簡単になり、解決策が提示される可能性があります。また、if文を使用するときに、1つのライナーであっても中括弧 '{} 'を追加することをお勧めします。その最後の関数でelse文を意図していたかもしれないが、代わりにセミコロンを入れて、すべてを1行にまとめておくと、混乱するように思えます。スペーシングに一貫性がない領域もたくさんあります。それについては – PolyMesh

答えて

1

いくつかの具体的な問題:

1)このコード:

else cout << number[i]; digit++; 

あなたは何を意味するのかだった:あなたが書いた何

else 
{ 
    cout << number[i]; 
    digit++; 
} 

されました:

else 
{ 
    cout << number[i]; 
} 
digit++; 

あなたの場合C/C++の新機能、常には中括弧を使用していますが、主にこの種の問題を回避するために、コードを他の人に明瞭にするために使用します。

2)あなたの表が裏返しです。数字の配列の上位桁を最初に置くと、最上位桁にキャリーする余地がなくなります。しかし、それを逆にして最下位の数字を最初に置くと、配列内の未使用の数字に移動することができます。

3)この宣言:

int number1[MAX_DIGITS]={}, number2[MAX_DIGITS]={}, sum[MAX_DIGITS]={}; 

が動作するように(つまり、番号の長さを追跡することはありません)あなたのアルゴリズムのためにゼロにすべての桁を初期化する必要があります。だから、2番目の追加は最初から数字を継承しないように、ループ内にある必要があります。

私は、上記の変更と多くのスタイルの変更を使用してコードを作り直しました:

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

void readBig(int[]); 
void printBig(int[]); 
void addBig(int[], int[], int[]); 

const int MAX_DIGITS = 100; 

int main() 
{ 
    bool finished = false;  

    while (! finished) 
    { 
     int number1[MAX_DIGITS]={0}, number2[MAX_DIGITS]={0}, sum[MAX_DIGITS]={0}; 
     char response; 

     cout << "Please enter a number up to " << MAX_DIGITS << " digits: "; 
     readBig(number1); 
     cout << "Please enter a number up to " << MAX_DIGITS << " digits: "; 
     readBig(number2); 
     addBig(number1, number2, sum); 
     printBig(number1); 
     cout << "\n+\n"; 
     printBig(number2); 
     cout << "\n=\n"; 
     printBig(sum); 
     cout << "\n"; 
     cout << "test again? "; 
     cin >> response; 
     cin.ignore(900, '\n'); 
     finished = toupper(response) != 'Y'; 
    } 

    return 0; 
} 

void readBig(int number[MAX_DIGITS]) 
{ 
    // This function below will read an input number as a string then input that into an array. 

    string read; 
    cin >> read; 

    int length = read.length(); 

    for (int i = length - 1, j = 0; i >= 0 && j < MAX_DIGITS - 1; i--) 
    { 
     number[i] = read[i] - '0'; 
    } 
} 

void printBig(int number[MAX_DIGITS]) 
{ 
    // This function below will display the number. 

    bool first_digit = false; // first value flag 

    for (int i = MAX_DIGITS - 1; i >= 0; i--) 
    { 
     if (number[i] != 0 || first_digit) 
     { 
      // clears leading zeros and checks for placeholder zeros 
      cout << number[i]; 
      first_digit = true; // else print val and check for beginning of number. 
     } 
    } 
} 

void addBig(int number1[MAX_DIGITS], int number2[MAX_DIGITS], int sum[MAX_DIGITS]) 
{ 
    // The code below sums the arrays. 

    for (int i = MAX_DIGITS - 1; i >= 0; i--) 
    { 
     sum[i] = number1[i] + number2[i]; 

     if (sum[i] > 9 && i < MAX_DIGITS - 1) 
     { 
      sum[i + 1] += 1; 
      sum[i] -= 10; 
     } 
    } 
} 

OUTPUT

% ./a.out 
Please enter a number up to 100 digits: 444444444 
Please enter a number up to 100 digits: 444666644 
444444444 
+ 
446666444 
= 
891110888 
test again? y 
Please enter a number up to 100 digits: 9999 
Please enter a number up to 100 digits: 9999 
9999 
+ 
9999 
= 
19998 
test again? n 
% 
+0

素晴らしい! TYVM !.あなたの答えをどうやって作るのですか?私は上の矢印をクリックしますが、私はまだこのサイトには新しいです。 – Joeybreh

+0

@Joeybreh、矢印と数字の下にグレーのチェックマークがあります。クリックすると、それが受け入れられるように緑色になるはずです。しかし、後で新しい答えが出るのを目の当たりにして、より良い気分になるようにしてください。いつでもあなたの選択を変えることができます。 – cdlane

関連する問題