-1

私の論理は正しいと思いますが、while は無限にループし、ゼロを出力します。これが私のコードです:

int currentMSD, currentNum = num;
if (currentNum >= 0 && currentNum < 100) {
    currentMSD = 10;
} else if (currentNum >= 100 && currentNum < 1000) {
    b1 = b * msd;
    b2 = num3 - b1;
    num3 = b2;
    switch(b) {
        case 1:
            cout << "one ";
            break;
        case 2:
            cout << "two ";
            cout << "five ";
            break;
        case 6:
            cout << "six ";
            break;
        case 9:
            cout << "nine ";
            break;
        case 0:
            cout << "zero ";
          break;
        }
    }
    cout << '\n';
}
4

6 に答える 6

1

250のようなものにどのような種類の出力を期待していますか?「ツーファイブゼロ」?

簡単な例を次に示します。

#include <iostream>

const char* nums[] = {"zero", "one", "two", "three", "four", 
                      "five", "six", "seven", "eight", "nine"};

void getMSD(unsigned int num)
{
    unsigned int remainder = num % 10;
    unsigned int result = num / 10;

    if(result > 0)
        getMSD(result);

    std::cout << nums[remainder] << " ";
}

int main()
{
    getMSD(125); //prints "one two five"

    return 0;
}
于 2012-07-10T04:28:43.897 に答える
1

関数では、getMSD一桁のチェックが必要です。

int getMSD(int num) {
    int currentMSD, currentNum = num;

    if (currentNum < 10) {
        currentMSD = 1;
    } else if (currentNum >= 10 && currentNum < 100) {
        currentMSD = 10;
    } else if (currentNum >= 100 && currentNum < 1000) {
        currentMSD = 100;
    } else if (currentNum >= 1000 && currentNum < 10000) {
        currentMSD = 1000;
    }
    return currentMSD;
}
于 2012-07-10T04:33:42.123 に答える
1

問題は、「getMsd」関数で 1 ~ 9 の数字をチェックしていないことです。ただし、スケーラブルではないため、このロジックを使用することはお勧めしません。つまり、このコードを 6 桁の数字で使用することはできません

于 2012-07-10T04:36:00.340 に答える
0

getMSD()機能が故障しています。この新しいものと交換してください

int getMSD(int num) {

int currentMSD = 1, currentNum = num;

if (currentNum >= 10 && currentNum < 100)
{
    currentMSD = 10;
}
else if (currentNum >= 100 && currentNum < 1000)
{
    currentMSD = 100;
}
else if (currentNum >= 1000 && currentNum < 10000)
{
    currentMSD = 1000;
}
return currentMSD;
}
于 2012-07-10T04:47:18.473 に答える
0

あなたは論理的な間違いを犯しました。あなたのロジックによると、入力として 250 があり、

msd = 100 , then b = 250/100 = 2.5 = 2 which should output 'two'
b1 = msd * b = 100 * 2 = 200
b2 = num - b1 = 250 - 200 = 50
num = b2 = 50
repeat
msd = 10, then b = 50/10 = 5 which should then output 'five'
b1 = msd * b = 50
b2 = num - b1 = 50 - 50 = 0

このロジックは、入力が 250 の場合は正常に機能しますが、入力が 205 の場合、減算num - b1 205-200すると 5 になるため、「ゼロ」は出力されません。

プログラムに関する限り、while条件によると、while (num3 > 0)この条件は最後の桁を出力しないため、条件を誤用しています。

あなたが私にポイントを与えることを願っています。:)

于 2012-07-10T05:16:21.533 に答える