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 等时遇到了困惑。它的内容与余数和 i 的值有关。我不知道该怎么办整天被困在上面。有任何想法吗?现在,当我输入一个数字时,它会返回它但随后崩溃。

4

2 回答 2

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;
}
于 2013-04-10T18:50:55.593 回答
0

不是循环,是递归

假设您有 123,456,789,然后使用上面的代码,您就有

十亿=0 百万=123 千=456

现在要输出“一亿二千四十五万六千……”,所以需要将123转换为“一百二十三”,需要将456转换为“四百五十六” ”。你是怎样做的?好吧,这与您已经尝试解决的问题完全相同,只是数字较小。

所以你是对的,你确实需要编写一个函数,当该函数需要将数百万转换为单词时,它会调用自己(即它是递归的)。转换千位数时也是如此。

于 2013-04-10T18:56:35.243 回答