Информатика, вопрос задал AlexGrishin , 7 лет назад

Написать программу на языке c++
Перевод вещественных чисел в текст в денежный формат
Например: 140,52
сто сорок рублей пятьдесят две копейки


Леганда555: а компилятор gnu или visual studio?
Леганда555: и какие ограничения?
Аноним: Насколько я понимаю границы 0,01 руб - 999,99 руб. (исходя из примера)
AlexGrishin: визуалка, ограничения от 0,01 и желательно до миллиарда
Леганда555: а могут быть такие входные данные: 10,0005 или 10,025 ?
AlexGrishin: Ограничение до двух знаков после запятой

Ответы на вопрос

Ответил settom
1

Ответ:

Примерно так, только нужно еще со склонением рублей и копеек поиграться.

#include <iostream>

#include <string>

#include <cmath>

#include <stdio.h>

using namespace std;

const  

   string edin[] = { "одна", "две", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять" };

   string teen[] = { "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать" };

   string des[] = { "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто" };

   string sto[] = { "сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот" };

   string thousand[] = { "одна тысяча", "две тысячи", "три тысячи", "четыре тысячи", "пять тысяч", "шесть тысяч", "семь тысяч", "восемь тысяч", "девять тысяч" };

   string ConvetToString(int a, int b, int c);

int main()

{

   setlocale(LC_ALL, "rus");

   

   double numb, i, drobn;

   int natur, dr;          //переменные для работы с целым и дробным

   int a, b, c, d, e, f;   //"временные" переменные для целого

   int x, y;            //"временные" переменные для дробной части

   string odin, dva, tri, chetir, pyat, shest; //переменные для целого

   string otr;             //переменая для минуса

   string one, two, three; //переменные для дробной части

   string result;

   cout << "Введите число: ";

   //cin >> numb;

   numb = 12345.56;

   drobn = modf(numb, &i);

   drobn *= 100;

   dr = drobn + 0.5;

   natur = (int)numb;

   //решение для целой части

   //разбиваем число на составные цифры для целой части

   a = natur % 10;                 //число единиц

   b = (natur % 100) / 10;         //число десятка

   c = (natur % 1000) / 100;       //число сотни

   f = natur / 100000;             //число сотен тысяч

   e = (natur % 100000) / 10000;   //число десятков тысяч

   d = (natur % 10000) / 1000;    //число тысяч

   

   result = ConvetToString(d, e, f);

   result = result + " тысячь ";

   result = result + ConvetToString(a, b, c);

   result = result + " рублей ";

   

   //решение для дробной части

   x = dr / 10;

   y = dr % 10;

   result = result + ConvetToString( x, y,0);

   result = result + " копеек";

   cout << result  ;

}

string ConvetToString(int a, int b, int c )

{

   string result = "", odin, dva, tri;

   if (a != 0 && b != 1)

       odin = edin[a - 1];

   else if (a == 0 && b == 1)

       odin = "десять";

   else if (a == 0 && b == 0)

       odin = "";

   if (b == 0)

       dva = "";

   else if (b == 1 && a != 0)

       dva = teen[a - 1];

   else if (b != 1)

       dva = des[b - 2];

   if (c != 0)

       tri = sto[c - 1];

   if (a == 0 && b == 0 && c == 0)

       odin = "ноль";

   result = tri + " " + dva + " " + odin;

   return result;

}


settom: //cin >> numb; надо раскомментировать и убрать следующую строчку (а то лень было при тесте каждый раз число вводить)
settom: если до миллиарда, то всё аналогично
AlexGrishin: Хотя бы так, спасибо
Новые вопросы