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

Я новичок, и я написал программу на c ++ для преобразования чисел между 0-99999 в слова. Он работает нормально для чисел до 100, но после этого он дает неправильный вывод. Я знаю, что есть серьезные логические ошибки, но я просто не могу их выяснить.

//This program converts number into words between 0-99999
#include<iostream>
using namespace std;
main()
{
    long int number,unit,ten,hundred,thousand,ten_thousand;
    cout<<"Please enter any number between 0-99999: ";
    cin>>number;
    ten_thousand=number/10000;
    thousand=number/1000;
    hundred=number/100;
    ten=number/10;
    unit=number%10;

    if(number<0 || number>99999)
    {
        cout<<"Number is out of range"; return 0;
    }
    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(thousand>=1 && thousand <=9)
        {
        if(thousand==1) cout<<"one thousand";
        if(thousand==2) cout<<"one thousand";
        if(thousand==3) cout<<"one thousand";
        if(thousand==4) cout<<"one thousand";
        if(thousand==5) cout<<"one thousand";
        if(thousand==6) cout<<"one thousand";
        if(thousand==7) cout<<"one thousand";
        if(thousand==8) cout<<"one thousand";
        if(thousand==9) cout<<"one thousand";
        }
    if(ten_thousand >=1 && ten_thousand <=9)
        {
        if(ten_thousand==1) cout<<"one thousand";
        if(ten_thousand==2) cout<<"two thousand";
        if(ten_thousand==3) cout<<"three thousand";
        if(ten_thousand==4) cout<<"four thousand";
        if(ten_thousand==5) cout<<"five thousand";
        if(ten_thousand==6) cout<<"six thousand";
        if(ten_thousand==7) cout<<"seven thousand";
        if(ten_thousand==8) cout<<"eight thousand";
        if(ten_thousand==9) cout<<"nine thousand";
        }
    if(ten == 1)
    {
        if(number==10) cout<<"ten"; 
        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==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==0 && ten ==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";
    }
}

Выход 1: - (правильный)

Please enter any number between 0-99999: 85
eighty five

Выход 2: - (Неверно)

Please enter any number between 0-99999: 254
two hundred four

Выход 3: - (Неверно)

Please enter any number between 0-99999: 98541
nine thousand one

Ответы [ 4 ]

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

Попробуйте это:

ten_thousand = number/10000;
number = number%10000;

thousand = number/1000;
number = number%1000;

hundred = number/100;
number = number%100;

ten = number/10;
number = number%10;

unit = number;
0 голосов
/ 29 октября 2018

Предположим, что вы хотите запустить свой код с 945 .

Первый расчет будет

945/100 = 9

Если вы выполните число / 10 , это приведет к:

945/10 = 94

Вот почему ваш код не работает. Каждый раз, когда вы делите свой «номер», вы должны масштабировать его.

number = 945
hund = 945/100 = 9
number = number - hund*100 = 45
ten = number/10 = 45/10 ( 4 )
number = number - ten*10 = 5
units = number/1 = 5
0 голосов
/ 29 октября 2018

Ваша логика извлечения неверна, как показал бы вам любой хороший отладчик.

Рассмотрим что-то вроде

unit = number % 10;
number /= 10; // remove the least significant digit by integer division
ten = number % 10;
number /= 10;
hundred = number % 10;
number /= 10;

и так далее. Этот подход хорош, поскольку он может быть преобразован в цикл в более позднее время с помощью unit, ten, hundred и т. Д. в конечном итоге становится элементами массива.

Также не забудьте извлечь любой отрицательный знак.

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

Когда вы выбираете единицы, скажем, thousands, вы не удаляете единицы раньше. Вы забыли по модулю:

thousand=(number % 10000)/1000;

То же самое верно для всех ваших юнитов, кроме первого и последнего, поэтому вы отображаете только первое ненулевое число, а затем последнее.

...