#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等时出现了混乱。它的东西与余数和价值一世。我无法弄清楚该怎么做一整天都被卡在上面。有任何想法吗?此外,当我输入一个数字时,它会返回它,但随后崩溃。
答案 0 :(得分: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;
}
答案 1 :(得分:0)
这不是循环,而是递归
假设您有123,456,789,然后使用上面的代码
十亿= 0 百万= 123 数千= 456
现在你要输出“一亿二千三百四十五万六千......”,所以你需要将123转换为“一百二十三”,你需要将456转换成“四百”和五十六“。你是怎样做的?嗯,这是你已经尝试解决的完全相同的问题,只有较小的数字。
所以你是对的,你需要编写一个函数,当该函数需要将数百万个转换为单词时,它将调用自身(即它将是递归的)。转换数千时也一样。