这几天帮香港那边一同学看代码,题目大概要求是输入整数,输出英文。
类似如下:
然后我是在同学写的基础上帮改的,感觉有点收藏意义,于是打算在此记录一下。
反正我感觉有点冗余了,我自己写可能会写的不太一样。
或许有错误没发现,发现了可以帮忙指正一下。
#include <iostream>
using namespace std;
int main()
{
cout << "Please enter an integer number: ";
int integer;
cin >> integer;
if (integer == 0)
{
cout << "Zero";
}
else
{
int num_of_integer;
int places;
num_of_integer = 0;
places = integer;
do
{
num_of_integer += 1;
places /= 10;
} while (places > 0);
int d = 12 - num_of_integer;
int digit[12];
for (int i = 0; i < 12; i++)
{
if (i < d)
{
digit[i] = 0;
}
else if (i >=d && i < 12)
{
int p = 0, power = 1;
while (p < 12 - i - 1)
{
power = 10 * power;
p += 1;
}
digit[i] = integer / power;
integer = integer - digit[i] * power;
}
}
for (int m = 0; m < 4; m++)
{
int m1, m2, m3;
m1 = 3 * m;
m2 = 3 * m + 1;
m3 = 3 * m + 2;
///3-digit segments
//如果三位是000,则跳过这三个
if (digit[m1]==0 && digit[m2]==0 && digit[m3]==0)
{
continue;
}
//如果第一位不是0,则表示hundred
switch (digit[m1])
{
case 1:
cout << "One Hundred ";
break;
case 2:
cout << "Two Hundred ";
break;
case 3:
cout << "Three Hundred ";
break;
case 4:
cout << "Four Hundred ";
break;
case 5:
cout << "Five Hundred ";
break;
case 6:
cout << "Six Hundred ";
break;
case 7:
cout << "Seven Hundred ";
break;
case 8:
cout << "Eight Hundred ";
break;
case 9:
cout << "Nine Hundred ";
break;
}
//如果第一位不是0后面两位不为00,则在hundred后面加and
if (digit[m1] != 0 && (digit[m2]!=0 || digit[m3]!=0))
{
cout << "and ";
}
//如果第一位是0后面两位不为00,则在加and,但要考虑10023这种类似情况,如果前面位全部是0则不能加and
if (digit[m1] == 0 && (digit[m2] != 0 || digit[m3] != 0))
{
int x = 0;
for (int i = 0; i < 3 * m; i++) {
x += digit[i];
}
if (x != 0) cout << "and ";
}
if (digit[m2] == 1)
{
switch (digit[m3])
{
case 0:
cout << "Ten ";
break;
case 1:
cout << "Eleven ";
break;
case 2:
cout << "Twelve ";
break;
case 3:
cout << "Thirteen ";
break;
case 4:
cout << "Fourteen ";
break;
case 5:
cout << "Fifteen ";
break;
case 6:
cout << "Sixteen ";
break;
case 7:
cout << "Seventeen ";
break;
case 8:
cout << "Eighteen ";
break;
case 9:
cout << "Nineteen ";
break;
}
}
else
{
switch (digit[m2])
{
case 2:
cout << "Twenty ";
break;
case 3:
cout << "Thirty ";
break;
case 4:
cout << "Forty ";
break;
case 5:
cout << "Fifty ";
break;
case 6:
cout << "Sixty ";
break;
case 7:
cout << "Seventy ";
break;
case 8:
cout << "Eighty ";
break;
case 9:
cout << "Ninety ";
break;
}
switch (digit[m3])
{
case 1:
cout << "One ";
break;
case 2:
cout << "Two ";
break;
case 3:
cout << "Three ";
break;
case 4:
cout << "Four ";
break;
case 5:
cout << "Five ";
break;
case 6:
cout << "Six ";
break;
case 7:
cout << "Seven ";
break;
case 8:
cout << "Eight ";
break;
case 9:
cout << "Nine ";
break;
}
}
switch (m)
{
case 0:
if (digit[m1] == 0 && digit[m2] == 0 && digit[m3] == 0)
{
cout << "";
}
else
{
cout << "Billion ";
}
break;
case 1:
if (digit[m1] == 0 && digit[m2] == 0 && digit[m3] == 0)
{
cout << "";
}
else
{
cout << "Million ";
}
break;
case 2:
if (digit[m1] == 0 && digit[m2] == 0 && digit[m3] == 0)
{
cout << "";
}
else
{
cout << "Thousand ";
}
break;
case 3:
break;
}
}
}
return 0;
}
结果如下:
仅供参考,请勿直接抄袭!!!
|