Определить, каким количеством цифр "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;
}

Объяснение кода листинга программы

  1. Объявление функции char int_symbol(int in), которая преобразует целое число в символ, используя таблицу символов.
  2. Объявление функции void ten_base(int in, int base), которая выводит число в десятичной системе счисления.
  3. Вычисление факториала с помощью рекурсивной функции int fact(int x).
  4. Объявление функции main(), которая является точкой входа в программу.
  5. Ввод числа и факториала числа в консоль.
  6. Ввод конечной системы счисления.
  7. Вызов функции ten_base(m, base) для перевода факториала в выбранную систему счисления.
  8. Вывод результата в консоль.
  9. Ожидание нажатия клавиши для завершения программы.
  10. Возврат значения 0, указывающего на успешный завершение программы.

Оцени полезность:

12   голосов , оценка 3.917 из 5
Похожие ответы