将数字打印成文字

Printing number into words

本文关键字:文字 打印 数字      更新时间:2023-10-16

我编写了一个程序,将0-9999之间的数字显示为单词。程序运行正常,但当我输入11-19的数字和415612819(基本上所有结尾包括0-19的数字(时,我遇到了意外的输出。我写的程序是用c++编写的,我现在是c++的初学者。

//This program converts number into words
#include<iostream>
using namespace std;
main()
{
int number,unit,ten,hundred,thousand;
cout<<"Please enter any number between 0-9999: ";
cin>>number;
thousand=number/1000;
number=number%1000;
hundred=number/100;
number=number%100;
ten=number/10;
number=number%10;
unit=number;
if(number>=11 && number <=19)
{
if(number==11) cout<<"eleven";
if(number==12) cout<<"twelve";  
if(number==13) cout<<"thirteen";
if(number==14) cout<<"fourteen";
if(number==15) cout<<"fifteen";
if(number==16) cout<<"sixteen";
if(number==17) cout<<"seventeen";
if(number==18) cout<<"eighteen";
if(number==19) cout<<"ninteen";
}
else
{    
if(thousand>=1 && thousand <=9)
{
if(thousand==1) cout<<"one thousand";
if(thousand==2) cout<<"two thousand";
if(thousand==3) cout<<"three thousand";
if(thousand==4) cout<<"four thousand";
if(thousand==5) cout<<"five thousand";
if(thousand==6) cout<<"six thousand";
if(thousand==7) cout<<"seven thousand";
if(thousand==8) cout<<"eight thousand";
if(thousand==9) cout<<"nine thousand";
}
if(hundred>=1 && hundred <=9)
{
if(hundred==1) cout<<" one hundred";
if(hundred==2) cout<<" two hundred";
if(hundred==3) cout<<" three hundred";
if(hundred==4) cout<<" four hundred";
if(hundred==5) cout<<" five hundred";
if(hundred==6) cout<<" six hundred";
if(hundred==7) cout<<" seven hundred";
if(hundred==8) cout<<" eight hundred";
if(hundred==9) cout<<" nine hundred";
}
if(ten>=1 && ten <=9)
{
if(ten==1) cout<<" ten";
if(ten==2) cout<<" twenty";
if(ten==3) cout<<" thirty";
if(ten==4) cout<<" fourty";
if(ten==5) cout<<" fifty";
if(ten==6) cout<<" sixty";
if(ten==7) cout<<" seventy";
if(ten==8) cout<<" eighty";
if(ten==9) cout<<" ninty";
}
if(unit>=1 & unit <=9)
{
if(unit==1) cout<<" one";
if(unit==2) cout<<" two";
if(unit==3) cout<<" three";
if(unit==4) cout<<" four";
if(unit==5) cout<<" five";
if(unit==6) cout<<" six";
if(unit==7) cout<<" seven";
if(unit==8) cout<<" eight";
if(unit==9) cout<<" nine";
}
}
}

输出:-

Please enter any number between 0-9999: 14
ten four

输出:-

Please enter any number between 0-9999: 114
one hundred ten four

这里您将number设置为介于09之间,到目前为止效果良好:

number=number%10;

但是您正在检查它是否在1119之间。这是不可能的:

if(number>=11 && number <=19)

因此,整个区块将被跳过,而最后两个区块匹配,给你"十个四"。第一块可能是之类的东西

if((ten==1) && (number>0))
{
if(number==1) cout<<"eleven";
if(number==2) cout<<"twelve";  
if(number==3) cout<<"thirteen";
if(number==4) cout<<"fourteen";
if(number==5) cout<<"fifteen";
if(number==6) cout<<"sixteen";
if(number==7) cout<<"seventeen";
if(number==8) cout<<"eighteen";
if(number==9) cout<<"ninteen";
}

我重新编写您的整个代码,使其简短易懂。此外,我还包含了一个重用代码的功能。我希望它能帮助你。

#include<iostream>
#include<string>
std::string cast_to_str(int, int);
int main(){
int num;
std::cout<<"Enter the number: ";
std::cin >>num;
if(num / 1000)
std::cout<<cast_to_str(num / 1000, 1)<<" thousand ";
if((num = num % 1000) / 100)
std::cout<<cast_to_str(num / 100, 1)<<" hundred ";
if((num = num % 100) == 10)
std::cout<<"ten"<<std::endl;
else if(num > 10){
if(num > 10 && num <= 19)
std::cout<<cast_to_str(num / 10, 2)<<std::endl;
else{
std::cout<<cast_to_str(num/10, 3);
if(num % 10)
std::cout<<cast_to_str(num%10, 1)<<std::endl;
}
}
else if(num)
std::cout<<cast_to_str(num, 1)<<std::endl;
else
std::cout<<std::endl;
return 0;
}
std::string cast_to_str(int num, int which){
switch(num){
case 1: return which == 1 ? "one"   : "eleven";
case 2: return which == 1 ? "two"   : (which == 2 ? "twelve"    : "twenty ") ;
case 3: return which == 1 ? "three" : (which == 2 ? "thirteen"  : "thirty ") ;
case 4: return which == 1 ? "four"  : (which == 2 ? "fourteen"  : "fourty ") ;
case 5: return which == 1 ? "five"  : (which == 2 ? "fifteen"   : "fifty ")  ;
case 6: return which == 1 ? "six"   : (which == 2 ? "sixteen"   : "sixty ")  ;
case 7: return which == 1 ? "seven" : (which == 2 ? "seventeen" : "seventy ");
case 8: return which == 1 ? "eight" : (which == 2 ? "eighteen"  : "eighty ") ;
case 9: return which == 1 ? "nine"  : (which == 2 ? "nineteen"  : "ninety ") ;
}
}