Другие языки программирования и технологии

С клавиатуры вводится целое число от 1 до 1000 обозначающую сумму в рублях. Программа должна печатать эту сумму прописью

Помогите пожалуйста решить задачу код С++
#include <stdio.h>
#include <locale.h>

bool output_snum(FILE* hout, int num){
if(!(num >= 1 && num <= 1000)){
return false;
}

int n = 0, d = 1;
for(int i = num; i != 0; i /= 10){
d *= 10;
++n;
}

const wchar_t* ds1[] = {
{L"один"}, {L"два"}, {L"три"}, {L"четыре"}, {L"пять"},
{L"шесть"}, {L"семь"}, {L"восемь"}, {L"девять"},
{L"десять"}, {L"одиннадцать"}, {L"двенадцать"}, {L"тринадцать"}, {L"четырнадцать"},
{L"пятнадцать"}, {L"шестнадцать"}, {L"семнадцать"}, {L"восемнадцать"}, {L"девятнадцать"}
};

const wchar_t* ds2[] = {
{L"двадцать"}, {L"тридцать"}, {L"сорок"}, {L"пятьдесят"}, {L"шестедьсят"},
{L"семьдесят"}, {L"восемьдесят"}, {L"девяносто"}
};

const wchar_t* ds3[] = {
{L"сто"}, {L"двести"}, {L"триста"}, {L"четыреста"}, {L"пятьсот"}, {L"шестьсот"},
{L"семьсот"}, {L"восемьсот"}, {L"девятьсот"}
};

const int index = (num/(d/10))%10;

switch(n){
case 1:
fwprintf(hout, L"%ls ", ds1[index - 1]);
break;
case 2:

if(index == 1){
fwprintf(hout, L"%ls ", ds1[num - 1]);
num = 0;
} else {
fwprintf(hout, L"%ls ", ds2[index - 2]);
}

break;
case 3:
fwprintf(hout, L"%ls ", ds3[index - 1]);
break;
case 4:
fwprintf(hout, L"тысяча ");
break;
}

d /= 10;
if((d > 0) && ((num % d) != 0)){
output_snum(hout, num % d);
}
return true;
}

int main(void){
setlocale(LC_ALL, ".866");
int num;

wprintf(L"\t\t\t\1 Введите число от 1-1000 \1\n> ");
while(scanf("%d", &num) == 1){
if(! output_snum(stdout, num)){
_putws(L"Ошибка: Число не входит в диапазон 1-1000 !");
}
wprintf(L"\n\n> ");
}
return 0;
}
Алексей Иванов
Алексей Иванов
11 372
Лучший ответ
Без С++ сможешь правильно написать? Если нет - то проблема не в Си.
печатать эту сумму лучше не прописью, а на бумаге:)))
напиши на бумаге, после скомпилируй эту бумагу и задача решена элементарно ватсон

Похожие вопросы