【问题标题】:Factorial digit sum (without BigInt) C++阶乘数字总和(没有 BigInt)C++
【发布时间】:2013-10-20 12:36:37
【问题描述】:

我正在想办法解决这个问题(Project Euler):

n!表示 n × (n − 1) × ... × 3 × 2 × 1

例如,10! = 10 × 9 × ... × 3 × 2 × 1 = 3628800,总和 数字 10 中的数字!是 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27。

求数字 100 中的数字之和!

使用 BigInt 不是一个选项,我正在尝试弄清楚如何仅使用 c++ 来实现解决方案。

我想也许可以将大数字拆分为大约 7 位长的数组或类似的东西,然后处理它们,但我仍然无法弄清楚如何做到这一点..

提前致谢!

【问题讨论】:

  • 您是否考虑过编写自己的 BigInt 类?
  • 实际上没有:) 但我想知道是否有办法在不使用 BigInt 类的情况下解决这个问题。

标签: c++ factorial


【解决方案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;
}

【讨论】:

  • 几点建议:使用using namespace std 是一种不好的做法,为变量使用更好的名称并在for 的条件for (int k=2;k&lt;n+1;k++) 中定义变量
  • @GabrielL。大声笑,没有看到 AbbaShareen 解决方案。
  • 请不要发布欧拉问题的完整解决方案。见projecteuler.net/about:“通常是出于善意,希望分享我们的见解,以便其他人也能享受那一刻。但遗憾的是,您的读者并非如此。真正的学习是一个积极的过程,并且看到它是如何完成的,距离体验那种发现的顿悟还有很长的路要走。请不要否认别人你如此珍视自己的东西。”
猜你喜欢
  • 1970-01-01
  • 2016-12-28
  • 2011-10-17
  • 2013-08-21
  • 1970-01-01
  • 1970-01-01
  • 2021-07-04
  • 2020-05-29
  • 2022-01-11
相关资源
最近更新 更多