题目
分析
基于我们之前的高精度基础,特别是P1303:A*B Problem,我们可以很快解决这个问题。
不过有一个小的改动,由于我们声明的高精度类中,保留计算结果的数组num是私有变量(private),所以在类之外是无法访问的。所以我们要增加一个getter:
class HighPrecision
{
friend istream& operator>>(istream& is, HighPrecision& hp);
friend ostream& operator<<(ostream& os, const HighPrecision& hp);
friend HighPrecision operator+(const HighPrecision& hp1,
const HighPrecision& hp2);
friend HighPrecision operator*(const HighPrecision& hp1,
const HighPrecision& hp2);
private:
vector<int> num;
public:
HighPrecision() {}
HighPrecision(const string& s)
{
for (int i = s.size() - 1; i >= 0; i--)
num.push_back(s[i] - '0');
}
// 新增一个getter
vector<int> getNum() const
{
return num;
}
};
然后我们就可以简单地先算出阶乘,然后遍历结果数组,分别统计即可。
答案

思考
请注意本题中阶乘计算时,声明乘数的方式:
HighPrecision result("1");
for (int i = 1; i <= n; i++)
{
HighPrecision hp(to_string(i));
result = result * hp;
}
也就是我们要将当前的乘数(i)转化为字符串。
