21xrx.com
2024-11-22 09:31:45 Friday
登录
文章检索 我的文章 写文章
求10000以内n的阶乘的C++代码
2023-07-05 16:20:29 深夜i     --     --
C++ 阶乘 10000

阶乘是一个非常常见的数学概念,它常常被用来描述一件事情发生的可能性。在计算机编程领域中,我们经常需要求解n的阶乘,这时候我们可以使用C++编写代码来自动计算。

以下是一个C++程序,用于求解10000以内任意数n的阶乘:


#include <iostream>

#include <vector>

using namespace std;

vector<int> num_to_vec(int n) {

  vector<int> vec;

  while(n > 0) {

    vec.push_back(n % 10);

    n /= 10;

  }

  return vec;

}

vector<int> mul(vector<int> v1, vector<int> v2) {

  vector<int> res(v1.size() + v2.size(), 0);

  for(int i = 0; i < v1.size(); i++) {

    for(int j = 0; j < v2.size(); j++) {

      res[i + j] += v1[i] * v2[j];

      res[i + j + 1] += res[i + j] / 10;

      res[i + j] = res[i + j] % 10;

    }

  }

  while(res.back() == 0 && res.size() > 1) res.pop_back();

  return res;

}

void print_vec(vector<int> vec) {

  for(int i = vec.size() - 1; i >= 0; i--) {

    cout << vec[i];

  }

  cout << endl;

}

int main() {

  int n;

  cin >> n;

  vector<int> res(1, 1);

  for(int i = 2; i <= n; i++) {

    vector<int> v2 = num_to_vec(i);

    res = mul(res, v2);

  }

  print_vec(res);

  return 0;

}

该程序使用了一种比较高效的方式来计算阶乘,即将一个大数分解成一个个数字,并且运用“竖式”乘法的思想,将每个数字和当前结果相乘得到新的结果,不断合并进位即可。

在程序中,我们首先将一个数n分解成由各位数字构成的vector,然后定义一个mul函数,该函数用于计算两个vector的乘积。这个函数以两个vector作为参数,返回它们的乘积,即一个新的vector。具体实现在函数中,我们对乘积各位的数字进行逐位乘法计算,然后不断向高位合并进位,最后得到一个新的vector。

在主函数中,我们将res初始化为1(因为阶乘的基本单位是1),然后逐次乘以2到n中所有的数字,最终得到了n的阶乘。最后,我们把计算结果打印出来即可。

当然,对于此题,如果想要求得更大的阶乘(例如100000的阶乘),就需要使用高精度库。不过,以上给出的程序可以满足平常编程需求,可以供大家参考、学习和使用。

  
  
下一篇: C++如何获取URL

评论区

{{item['qq_nickname']}}
()
回复
回复