一只猪


私信TA

用户名:TuT99

访问量:8235

签 名:

拥有良好的积累,并且一直在路上,我相信自己有无限的可能

等  级
排  名 75
经  验 9813
参赛次数 6
文章发表 68
年  龄 21
在职情况 学生
学  校 哔哩哔哩大学
专  业 计算机科学与技术

  自我简介:

代码解析:

multiply 函数实现高精度乘法。它接受一个存储数字的向量 num 和一个因子 factor 作为参数,并返回乘法结果的向量 result。

在 multiply 函数中,使用 carry 变量来保存进位。

在 for 循环中,逐位进行乘法运算,并将结果加入 result 向量中。同时更新进位 carry。

在 while 循环中,将剩余的进位加入 result 向量。

最后返回 result 向量,即乘法运算的结果。

factorial 函数计算阶乘。它接受一个整数 n 作为参数,并返回结果的向量 result。

初始时,将1添加到 result 向量中。

使用 for 循环,从2开始依次乘以2到 n 之间的整数,并将结果更新到 result 向量中。

最后返回 result 向量,即阶乘的结果。

printNumber 函数用于输出高精度整数。它接受一个存储数字的向量 num 作为参数。

从 num 的末尾开始遍历,输出每个数字。

最后输出换行符。

在 main 函数中,首先读入一个整数 n。

调用 factorial 函数计算 n 的阶乘,将结果保存在 result 向量中。

调用 printNumber 函数输出结果向量 result。



参考代码:

#include <iostream>

#include <vector>

using namespace std;

// 高精度乘法

vector<int> multiply(vector<int>& num, int factor) {

    vector<int> result;

    int carry = 0;


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

        int temp = num[i] * factor + carry;

        result.push_back(temp % 10);

        carry = temp / 10;

    }


    while (carry > 0) {

        result.push_back(carry % 10);

        carry /= 10;

    }


    return result;

}


// 计算阶乘 n!

vector<int> factorial(int n) {

    vector<int> result;

    result.push_back(1);


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

        result = multiply(result, i);

    }


    return result;

}


// 输出高精度整数

void printNumber(std::vector<int>& num) {

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

        cout << num[i];

    }

    cout << endl;

}


int main() {

    int n;

    cin >> n;

    vector<int> result = factorial(n);

    printNumber(result);


    return 0;

}


 

0.0分

2 人评分

  评论区