2013-04-10 128 views
0
#include <iostream> //including header files#include <string> 
#include <string> 

using namespace std; 


//string array declared 
string units[3][11] = {{"One","Two","Three", "Four", "Five", "Six","Seven","Eight", "Nine","Ten"}, 
{"Eleven", "Twelve", "Thirteen","Fourteen", "Fifteen", "Sixteen", "Seventeen","Eighteen", "Nineteen"}, 
{"Twenty", "Thirty", "Fourty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety", "", ""}}; 


//function defs 
void func6 (int unsigned long i); 
void func5 (int unsigned long i); 
void func4 (int unsigned i); 
void func3 (int unsigned i); 
void func2 (int unsigned i); 
void func1 (int unsigned t); 
void func (int unsigned i); 

int main() //main body of fcn 
{ 
long int num; //declaring integers 

int j=1; 

while (j==1) //start of while loop 
    { 
     cout << "Enter a number between -2 billion and 2 billion " << endl; //prompts user for i/p and stores it 
     cin >> num; 

     if ((num < -2000000000) || (num > 2000000000)) //exits program if not within these limits 
     { 
      cout << "Number Invalid " << endl; 
      return 0; 
     } 
     else 
     { 
      func(num); //call functions 
      func1(num); 
      func2(num); 
      func3(num); 
      func4(num); 
      func5(num); 
//   func6(num); 
     } 
    } 
} 


/*void func6 (int unsigned long i) //start of fcn5 
{ 
    int unsigned long t; //declares integer t 


    if (i>9999&&i<100000) //if within these limits statement executes 
    { 
     t=i%1000; //works out remainder 
     i=i/1000; //works out new i value 
     cout << units[1][i-11] << " Thousand "; //prints out result whilst looking up table 


     if (t<10) //if remainder within limits calls function 
     func(t); 
     else if (t>=10&&t<20) 
     func1(t); 
     else if (t>19&&t<=100) 
     func2(t); 
     else if (t>99&&t<1000) 
     func3(t); 


    } 
} 
*/ 



void func5 (int unsigned long i) //start of fcn5 
{ 
    int unsigned long t; //declaring integer 
    if (i>9999&&i<100000) // if value within these limits then execute 
    { 
     t=i%10000; //works out remainder 
     i=i/10000; //works out new value of i 
     cout << units[2][i-2] << " Thousand "; //prints out result whilst looking up table 

     if (t<10) //calls function if remainder within these limits 
     func(t); 
     else if (t>=10&&t<20) 
     func1(t); 
     else if (t>=20&&t<100) 
     func2(t); 
     else if (t>=100&&t<1000) 
     func3(t); 

    } 
} 



void func4 (int unsigned i) //start of function 4 
{ 
    int unsigned t; //declares integer 
    if (i>=1000&&i<10000) //if within these limits execute fcn 
    { 
     t=i%1000; //works out remainder 
     i=i/1000; //works out new value of i 
     cout << units[0][i-1] << " Thousand "; //prints out result whilst looking up table 

     if (t<10) //calls function if remainder within limits 
     func(t); 
     else if (t>=10&&t<20) 
     func1(t); 
     else if (t>=20&&t<100) 
     func2(t); 
     else if (t>=100&&t<1000) 
     func3(t); 


    } 
} 


void func3 (int unsigned i) //start of fcn 3 
{ 
    int unsigned t; //delcares integer 
    if (i>=100&&i<1000) //statement executes if within limits 
    { 
     t=i%100; //works out remainder 
     i=i/100; //works out new value 
     cout << units[0][i-1] << " Hundred "; //prints out result whilst looking up table 

     if (t<10) //if remainder within these limits calls previous functions 
     func(t); 
     else if (t>=10&&t<20) 
     func1(t); 
     else if (t>=20&&t<100) 
     func2(t); 
    } 
} 


void func2(int unsigned i) //start of fcn2 
{ 
    int unsigned t; //declares integer 


    if (i>=20&&i<100) //if i within limits statement executes 
    { 
      t=i%10; //works out remainder 
      i=i/10; //works out new i value 
      cout << units[2][i-2] ; //prints result out whilst looking up table 


      if (t < 10) //if remainder within these limits calls function 
      func(t); 
    } 
} 


void func1(int unsigned i) //start of func1 
{ 
    int unsigned t; //declares integer 
    if (i>10&&i<20) //if i within these limits statement executes 
    { 
     t=i%10; //works out remainder 
     cout << units[1][t-1] << endl; //prints out value whilst looking up table 
    } 
} 


void func(int unsigned t) //start of fcn 
{ 
    if (t<=10) //if statement less than 10 executes 
    { 
     cout << " " << units[0][t-1] << endl; //prints out result whilst looking up table. 
    } 
} 

右我已經寫了這個代碼,它適用於大多數的數字卻落下了混亂,同時試圖打印出10000,11000,12000,90000 ...,91000等。它的東西與餘下的和我的價值做。我無法弄清楚整天干什麼。有任何想法嗎?現在,當我輸入一個數字時,它會返回它,但然後崩潰。數字轉換爲Word C++

+0

不會編譯:else之後不需要分號 – imulsion 2013-04-10 18:53:17

+0

由於這是一個小的賦值,因此不需要使用for循環。使用數量變量作爲數組的索引。 – 2013-04-10 18:55:36

+0

此外,'char units [10]'定義了10 *個字符*的數組,而不是10 *個字符串*。你應該有一個數組(更好的是一個向量)的字符串。 – maditya 2013-04-10 18:56:56

回答

1

原帖是可怕的。抱歉。 現在,我正確地閱讀了您的問題,我可以給你一些初步的版本。但你必須稍微修改它才能調整它。

string bases[6] = {"", "ten", "hundred", "thousand", "ten thousand", "million"}; 


string digit_to_word (int n) 
{ 
if(n == 1) 
    return "one"; 
if(n == 2) 
    return "two"; 
if(n == 3) 
    return "three"; 
if(n == 4) 
    return "four"; 

} 

string number_to_word(int i, int pow) { 
    if(i < 10) { 
     return digit_to_word(i); 
    } 

    else { 
     int k = i/10; 
     if(k > 10) 
     return number_to_word(k, ++pow) + "^" + bases[pow] + " " + digit_to_word(i%10) ; 
     else 
     return digit_to_word(k) + "^" + bases[pow] + " " + " " + digit_to_word(i%10); 
    } 
} 



int main() { 
    cin>>i; 
    cout << number_to_word(i, 1); 
    return 0; 
} 
+0

這不是他想要做的 – imulsion 2013-04-10 18:51:23

+0

@john雅沒有正確閱讀。我想我已經讓他做了一點點。 – 2013-04-10 19:29:51

0

這不是一個循環,這是遞歸

假設你有123,456,789,然後用你的代碼你上面有

億= 0 百萬= 123個 數千= 456

現在你想要輸出「一二三百四十五萬六千......」,所以你需要將123轉換爲「一百二十三」,你需要將456轉換爲「四百一五十六「。你是怎樣做的?那麼它就是你已經試圖解決的問題,只有更小的數字。

所以你是對的,你確實需要編寫一個函數,當這個函數需要將百萬字節轉換成單詞時,它會自動調用它(即它將是遞歸的)。當它轉換成千上萬時相同。

+0

嗨,感謝您的回覆我仍然迷失。在函數內部,你的意思是創建另一個if-else語句並將其與存儲的結果進行比較? – user2204993 2013-04-10 19:52:12

+0

不,因爲我看到它只有一個函數,只有一個if else語句。關鍵是該函數自己調用。但我相信這不是唯一的方法。 – john 2013-04-10 22:10:38