Преобразование двухзначного числа в слова - PullRequest
0 голосов
/ 28 октября 2018

Я написал программу на с ++ для преобразования числа в слова.Вывод для 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

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

Есть только два места, где вам нужно просто внести незначительные изменения, и вы получите желаемый результат

сначала, когда вы разделяете десять частей, умножьте его на 10 в обратном направлении, чтобы проверить кратность 10 вВаши условия if кратны 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";    }               
    }   
0 голосов
/ 28 октября 2018

На самом деле ваша программа работает правильно.Для ввода 25 должно быть пять, потому что вы делаете unit = number%10, который возвращает 5 и if(unit==5) cout<<"five"; прямо из вашего собственного кода.

Если вы хотите получить twenty five взамен, вы должны изменитькод.

Вместо прямого сопоставления сохраните числа на карте и проверьте их значение.и другой подход - хранить их в двух разных списках, таких как: d1 = ['zero','one' ...] и d10 = ['ten', 'twenty', 'thirty', ...].Этим вы ничего не будете повторять.Кроме того, вы можете проверить длину ввода и узнать, является ли оно одним десятичным числом или двумя, и если 2 десятичного числа, вы можете получить первое с number/10 и второе с number%10 и объединить результат.Пусть 'take 25, вы будете искать 2 в списке d10 и 5 в списке d1, и в конце вы получите «двадцать» + «пять»

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

...