2012-07-10 98 views
-1

我認爲我的邏輯正確,但while循環無限次,輸出零。這裏是我的代碼:C++將數字轉換爲單詞

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'; 
} 
+0

這裏有一個提示:通過與NUM3代碼運行= 1 – Carl 2012-07-10 04:33:52

+0

您應該新增)'else'塊'getMSD('(用' assert(false);'如果沒有其他),這樣你就可以實際檢測出發生無效範圍的時間,而不是返回未初始化的值。類似地,''default:'應該被添加到'getWords()'中的'switch'中,以防計算結果不符合您的期望,並且最終得到的值不是0到9。 – 2012-07-10 04:36:40

+0

也許看一些[現有的代碼](http://www8.cs.umu.se/~isak/snippets/fmtmoney.c)可以提供一些啓發/指導。 – 2012-07-10 04:38:44

回答

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; 
} 
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; 
} 
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; 
} 
1

問題是你是不是從1檢查號碼 - 9在'getMsd'函數中。不過,我不建議你使用這個邏輯,因爲它不可擴展。我的意思是你不能使用這個代碼與6位數字

+1

或18位數字 – 2012-07-10 04:48:26

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 - b1205-200你會得到5

就您的程序而言,您正在誤用while條件,因爲根據您的條件while (num3 > 0)此條件永遠不會打印最後一位數字。

希望你能明白我的觀點。 :)

0

做更多的控制權(美化):

int getMSD(const int& num) { 
    int currentMSD = 1; 
    const int N = 3; 
    for(int j = 1, i = 1; j != N; ++j, i * 10) { 
     if(num >= 10 * i && num < 100 * i) { 
      currentMSD = 10 * i; 
     } 
    }   
    return currentMSD; 
}