Консультация № 71490
18.01.2007, 12:03
0.00 руб.
0 1 1
Здравствуйте, уважаемые эксперы. помогите пожалуйста решить задачу. Очень нужно, чтоб получить зачёт.
Заранее благодарю.
Условие задачи:
На входе 123,45
На выходе сто двадцать три рублЯ сорок пять копеЕК
Решить задачу с 2-мя условиями:
1) Когда входные данные - вещественное число
2) Когда входные данные - строка
Ограничения:
1) Шаблон определить самим ([+/-][99...][./,][99])
2) Реализовать меню
3) Выход из программы по признаку конца
4) Формулу преобразования строки в число реализовать самим

Обсуждение

Неизвестный
19.01.2007, 09:02
общий
это ответ
Здравствуйте, Чагина Наталья!
Вот ссылка на исходник с решением этой задачи.

http://algolist.manual.ru/maths/misc/sumwrite.php

На всякий случай повторяю его в приложении. Используя этот исходник в качастве основы все остальное (условия и ограничения задачи) несложно доделать...

Приложение:
#include <stdio.h>#include <string.h>#define DG_POWER 6 // Это допустимая степень числа 1000 для __int64: // При необходимости его легко увеличить,struct s_POWER { // дополнив массив ‘a_power‘ и заменив int sex; // тип __int64 на более серьезный char *one; char *four; char *many;} a_power[]= { {0,NULL ,NULL ,NULL }, // 1 {1,"тысяча " ,"тысячи " ,"тысяч " }, // 2 {0,"миллион " ,"миллиона " ,"миллионов " }, // 3 {0,"миллиард " ,"миллиарда " ,"миллиардов " }, // 4 {0,"триллион " ,"триллиона " ,"триллионов " }, // 5 {0,"квадриллион ","квадриллиона ","квадриллионов "}, // 6 {0,"квинтиллион ","квинтиллиона ","квинтиллионов "} // 7};struct s_UNIT { char *one[2]; char *two; char *dec; char *hun;} digit[10]= { {{"" ,"" },"десять " ,"" ,"" }, {{"один " ,"одна " },"одиннадцать " ,"десять " ,"сто " }, {{"два " ,"две " },"двенадцать " ,"двадцать " ,"двести " }, {{"три " ,"три " },"тринадцать " ,"тридцать " ,"триста " }, {{"четыре ","четыре "},"четырнадцать ","сорок " ,"четыреста "}, {{"пять " ,"пять " },"пятнадцать " ,"пятьдесят " ,"пятьсот " }, {{"шесть " ,"шесть " },"шестнадцать " ,"шестьдесят " ,"шестьсот " }, {{"семь " ,"семь " },"семнадцать " ,"семьдесят " ,"семьсот " }, {{"восемь ","восемь "},"восемнадцать ","восемьдесят ","восемьсот "}, {{"девять ","девять "},"девятнадцать ","девяносто " ,"девятьсот "}};string dig2str (__int64 p_summa, int p_sex, char *p_one, char *p_four, char *p_many){ int i,mny; string str,result=""; __int64 divisor; //делитель a_power[0].sex = p_sex; a_power[0].one = p_one; a_power[0].four = p_four; a_power[0].many = p_many; if(p_summa == (__int64)0) return string("ноль ")+p_many; if(p_summa < (__int64)0) {result="минус "; p_summa = -p_summa;} for(i=0,divisor=(__int64)1; i<DG_POWER; i++) divisor *= (__int64)1000; for(i=DG_POWER-1; i>=0; i--){ divisor /= 1000; mny = (int)(p_summa / divisor); p_summa %= divisor; str=""; if(mny==0){ if(i>0) continue; str += a_power[i].one; }else{ if(mny>=100){str += digit[mny/100].hun; mny%=100;} if(mny>=20 ){str += digit[mny/10 ].dec; mny%=10; } if(mny>=10 ) str += digit[mny-10 ].two; else if(mny>=1 ) str += digit[mny].one[a_power[i].sex]; switch(mny){ case 1: str += a_power[i].one; break; case 2: case 3: case 4: str += a_power[i].four; break; default: str += a_power[i].many; break; }; } result += str; } return result;}
Форма ответа