【问题标题】:Converting two number digit into words将两个数字转换为单词
【发布时间】:2018-10-28 12:08:58
【问题描述】:

我用 C++ 编写了一个程序来将数字转换为单词。 0-19 的输出很好,但对于 20-99 之间的数字输出错误。

//This program converts numbers from 0-99 into words
#include<iostream>
using namespace std;
int main()
{
    int number,unit,ten;
    cout<<"Please enter any number between 0-99: ";
    cin >>number;
    ten=number/10;
    unit=number%10;
    if(number<0 | number>99)
        cout<<"Number is out of range";
    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(unit==0) cout<<"zero";
        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";
        if(ten==10) cout<<"Ten";
        if(ten==20) cout<<"twenty";
        if(ten==30) cout<<"thirty";
        if(ten==40) cout<<"fourty";
        if(ten==50) cout<<"fifty";
        if(ten==60) cout<<"sixty";
        if(ten==70) cout<<"seventy";
        if(ten==80) cout<<"eighty";
        if(ten==90) cout<<"ninty";
    }               
}   

输出:

Please enter any number between 0-99: 25
five

【问题讨论】:

  • 10 等于 2,但您正在针对 20 进行测试
  • 即使你修复了tens,你也会得到“五点二十”,这有点奇怪。

标签: c++ if-statement numbers word


【解决方案1】:

实际上,您的程序运行正常。对于输入 25,它应该给出 5,因为您正在执行 unit = number%10,它会从您自己的代码中返回 5 和 if(unit==5) cout&lt;&lt;"five";。

如果您想获得twenty five 作为回报,您应该更改代码。

不要直接匹配,而是将数字存储在地图中并检查它的值。另一种方法是将它们存储在 2 个不同的列表中,例如:d1 = ['zero','one' ...] 和 d10 = ['ten', 'twenty', 'thirty', ...]。这样,您将不会重复任何事情。此外,您可以检查输入的长度并知道它是一个十进制数还是两个十进制数,如果是 2 个十进制数,您可以使用number/10 获得第一个,使用number%10 获得第二个并连接结果。 假设25,您将在d10 列表中搜索2,在d1 列表中搜索5,最后,您将得到“二十”+“五”

n1 = number/10
n2 = number%10
for i in d10:
    if i == n1:
        for j in d1:
            if j == n2:
                print(i+' ' +j)
            else:
               break
     else:
         break

注意:代码在 python 3.x

【讨论】:

  • 现在我会尝试用 C++ 编写,如果你不能自己编写,但如果你知道 for 循环和 if 在 c++ 中,这很简单
  • 希望对您有所帮助,很高兴在这里见到您。编码快乐!
【解决方案2】:

只有两个地方你只需要做一些小的改动,你就会得到你想要的结果

首先,当您将十个部分分开时,将其乘以 10 以在您的 if 条件中检查 10 的倍数 10 即 10 , 20 ,.. 然后您只需将所有十位比较的位置更改为高于所有其他位的数字比较

我复制了您的代码并进行了更改, 我在下面评论了您需要更改的地方

    //This program converts numbers from 0-99 into words
    #include<iostream>
    using namespace std;
    int main()
    {   
        int number,unit,ten;
        cout<<"Please enter any number between 0-99: ";
        cin >>number;
        ten=number/10;
        unit=number%10;
        ten=ten*10;// multiply again it make it power of 10 so that you can check for if for multiple of 10
        if(number<0 | number>99)
            cout<<"Number is out of range";
        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(ten==10) cout<<"Ten";
            if(ten==20) cout<<"twenty";
            if(ten==30) cout<<"thirty";
            if(ten==40) cout<<"fourty";
            if(ten==50) cout<<"fifty";
            if(ten==60) cout<<"sixty";
            if(ten==70) cout<<"seventy";
            if(ten==80) cout<<"eighty";
            if(ten==90) cout<<"ninty";
            //all ten position comparisons has been shifted before all one's position comparisons
            if(unit==0) cout<<"zero";
            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";    }               
    }   

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 2020-04-26
    • 2013-03-13
    相关资源
    最近更新 更多