Определить, каким количеством цифр "0" заканчивается запись числа N! в K-ичной системе счисления - C (СИ) (148881)
Формулировка задачи:
А как определить, каким количеством цифр "0" заканчивается запись числа N! в K-ичной системе счисления.
// factorial.cpp: определяет точку входа для консольного приложения. /* Факториалом натурального числа N (обозначается N!) Назывется произведение всех натуральных чисел от 1 до N включительно: N! = 1 Г— 2 Г— 3 Г— ... Г— N. Нужно определить, каким количеством цифр "0" заканчивается запись числа N! в K-ичной системе счисления. */ #include "stdafx.h" #include <windows.h> #include <iostream> #include <string> using namespace std; string zel(int a[], int la, int q, int p, string u) { string c = ""; int snos, j; do { j = 0; snos = 0; for (int i = 0; i<la; i++) { snos *= q; snos += a[i]; if ((snos<p) && (i) && (j)) { a[j] = 0; j++; } if (snos >= p) { a[j] = snos / p; snos = snos%p; j++; } } c = u[snos] + c; la = j; } while (la); return c; } int fact(int x) { if (x == 1) return 1; else return x*fact(x - 1); } int main() { setlocale(LC_ALL, "Russian"); int n=0; INT m = 0; //Вычислляем факториал printf("Введите число n: "); scanf("%d", &n); m = fact(n); n <= 0 ? printf("Nevernoe znachenie!\n") : printf("%d! = %d\n", n, m); //Переводим факториал в конечную систему счисления string u("0123456789ABCDEF"), a; int q, p; cout << "Введите число: "; cin >> a; cout << "Введите исходную систему счисления: "; cin >> q; cout << "Введите конечную систему счисления: "; cin >> p; int la = a.size(); int *array = new int[la]; for (int i = 0; i <= la; i++) array[i] = u.find(toupper(a[i])); cout << string(80, '_') << zel(array, la, q, p, u) << endl; //считаем число цифр 0 system("pause"); return 0; }
Решение задачи: «Определить, каким количеством цифр "0" заканчивается запись числа N! в K-ичной системе счисления»
textual
Листинг программы
// conver number cc K.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <iostream> #include <windows.h> using namespace std; char int_symbol(int in){ char out[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' }; return out[in]; } void ten_base(int in, int base){ if (in<base) { std::cout << int_symbol(in); return; } ten_base(in / base, base); std::cout << int_symbol(in%base) ; } //вычисляем факториал int fact(int x) { if (x == 1) return 1; else return x*fact(x - 1); } int main(){ //setlocale(LC_ALL, ""); SetConsoleOutputCP(1251); SetConsoleCP(1251); int in; int base; cout << "Ведите число" << endl; std::cin >> in; int m = fact(in); cout << "факториал числа " << in << "!=" << m<< endl; cout << "Ведите конечную систему счисления" << endl; std::cin >> base; cout << "Результат перевода факториала в к ричную систему" << endl; ten_base(m, base); cout << endl; system("pause"); return 0; }
Объяснение кода листинга программы
- Объявление функции
char int_symbol(int in)
, которая преобразует целое число в символ, используя таблицу символов. - Объявление функции
void ten_base(int in, int base)
, которая выводит число в десятичной системе счисления. - Вычисление факториала с помощью рекурсивной функции
int fact(int x)
. - Объявление функции
main()
, которая является точкой входа в программу. - Ввод числа и факториала числа в консоль.
- Ввод конечной системы счисления.
- Вызов функции
ten_base(m, base)
для перевода факториала в выбранную систему счисления. - Вывод результата в консоль.
- Ожидание нажатия клавиши для завершения программы.
- Возврат значения 0, указывающего на успешный завершение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д