Nano Hash - криптовалюты, майнинг, программирование

Факторная сумма цифр (без BigInt) C++

Я пытаюсь понять, как решить эту проблему (проект Эйлера):

н! означает n × (n - 1) × ... × 3 × 2 × 1

Например, 10! = 10×9×…×3×2×1 = 3628800, а сумма цифр в числе 10! равно 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27.

Найдите сумму цифр в числе 100!

Использование BigInt не вариант, я пытаюсь понять, как реализовать решение, используя только С++.

Я подумал, может быть, разделить большие числа на массив длиной около 7 цифр или что-то в этом роде, а затем разобраться с ними, но я все еще не могу понять, как это сделать.

заранее спасибо!

12.10.2013

  • Думали ли вы о написании собственного класса BigInt? 12.10.2013
  • На самом деле нет :) Но я хочу узнать, есть ли способ решить эту проблему без использования класса BigInt. 12.10.2013

Ответы:


1

Попробуй это

#include "iostream"
#include "vector"

int n,remainder,sum;
int main ()
{   
    std::vector <int> digits(5000);    
    std::cin>>n;    
    digits[0]=1;
    digits[1]=1;
    for (int k=2;k<n+1;k++) {
        for (int i=1;i<=digits[0];i++) {
            digits[i]=digits[i]*k+remainder;
            remainder=0;
            if (digits[i]>9) {
                remainder=digits[i]/10;
                digits[i]%=10;
                if (i==digits[0])
                digits[0]++;
            }
        }
    }   
    for (int i=digits[0];i>=1;i--)
        sum+=digits[i];
    std::cout<<sum;
}
12.10.2013
  • Несколько советов: использование using namespace std — плохая практика, используйте лучшие имена для переменных и определяйте переменные внутри условия for for (int k=2;k<n+1;k++). 12.10.2013
  • @Габриэль Л. LOL, не видел решения AbbaShareen. 12.10.2013
  • Пожалуйста, не публикуйте полные решения задач Эйлера. См. projecteuler.net/about : часто из лучших побуждений мы хотим поделиться своими мыслями, чтобы другие тоже может насладиться этим моментом. К сожалению, однако, это не будет иметь место для ваших читателей. Настоящее обучение — это активный процесс, и наблюдение за тем, как оно происходит, далеко от того, чтобы испытать прозрение открытия. Пожалуйста, не отказывайте другим в том, что вы так высоко ценили сами. 14.10.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..