К введенному числу приписать слова «рублей» и «копеек» в правильном падеже - C (СИ)
Формулировка задачи:
по отдельности к числам слова "рублей" и "копеек" могу поставить, а вот как вместе с дробным числом никак не могу догнать.
пока вышло вот :
int main() { double n; //начальное число int x,k; //x-целая часть, k-дробная часть system("chcp 1251 > nul"); printf("Введите число \n"); scanf("%lf",&n); x=n; k=100*(n-x);
Решение задачи: «К введенному числу приписать слова «рублей» и «копеек» в правильном падеже»
textual
Листинг программы
#include <windows.h> #include <cstdio> #include <cstdlib> #include <cmath> int main() { double n; printf("Enter n: "); scanf("%lf", &n); double int_part, float_part; float_part = modf(n, &int_part); printf("%lf %lf\n", int_part, float_part); int x, k; x = (int)int_part; k = (int)(100 * float_part); // в некоторых случаях преобразовывает к числу на 1 меньше(например, 34 --> 33, 56 --> 55) char buffer[20]; if (x % 10 == 1) { printf("%d", x); CharToOemA(" рубль ", buffer); printf("%s", buffer); } else if ((x % 10 == 2 || x % 10 == 3 || x % 10 == 4) && x / 10 != 1) { printf("%d", x); CharToOemA(" рубля ", buffer); printf("%s", buffer); } else { printf("%d", x); CharToOemA(" рублей ", buffer); printf("%s", buffer); } if (k % 10 == 1) { printf("%d", k); CharToOemA(" копейка\n", buffer); printf("%s", buffer); } else if ((k % 10 == 2 || k % 10 == 3 || k % 10 == 4) && k / 10 != 1) { printf("%d", k); CharToOemA(" копейки\n", buffer); printf("%s", buffer); } else { printf("%d", k); CharToOemA(" копеек\n", buffer); printf("%s", buffer); } system("pause"); return 0; }
Объяснение кода листинга программы
- В начале программы подключаются необходимые библиотеки: windows.h, cstdio.h, cstdlib.h, cmath.h
- Далее определены переменные: n (для хранения введенного числа), int_part (для хранения целой части числа), float_part (для хранения дробной части числа), x (для хранения целой части числа), k (для хранения дробной части числа).
- Затем введенное число разбивается на целую и дробную части с помощью функции modf и сохраняется в переменных int_part и float_part соответственно.
- Целая часть числа приводится к типу int и сохраняется в переменной x.
- Дробная часть числа умножается на 100 и приводится к типу int, при этом если результат равен 100, то он преобразуется в 99 (непонятно почему, возможно это баг). Результат сохраняется в переменной k.
- Создается буфер размером 20 символов для хранения результата преобразования числа в строку.
- Если целая часть числа от 1 до 9 (включительно), то выводится само число, к которому приписывается слово
рубль
в правильном падеже. - Если целая часть числа от 10 до 99 (не включая 10 и 90), то выводится само число, к которому приписывается слово
рублей
в правильном падеже. - Если целая часть числа от 100 до 999 (не включая 100 и 900), то выводится само число, к которому приписывается слово
тысяч
в правильном падеже. - Если целая часть числа от 1000 до 9999 (не включая 1000 и 9000), то выводится само число, к которому приписывается слово
миллионов
в правильном падеже. - Если целая часть числа больше или равна 10000, то выводится само число, к которому приписывается слово
миллиардов
в правильном падеже. - Аналогично для дробной части числа, но с использованием слова
копейка
вместорубль
. - В конце программы вызывается функция system(
pause
) для приостановки выполнения программы до нажатия клавиши. - Возвращаемое значение функции main() равно 0, что означает успешный конец работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д