#include<iostream>
#include<vector>
using namespace std;

vector<int> factorialBase(int n) {
    vector<int> result;
    if (n == 0) {
        result.push_back(0);
        return result;
    }
    
    while (n > 0) {
        int remainder = n % 10;
        result.insert(result.begin(), remainder);
        n /= 10;
    }
    
    for (int i = 0; i < result.size(); i++) {
        result[i] = result[i] * (i + 1);
    }
    
    for (int i = result.size() - 1; i > 0; i--) {
        result[i - 1] += result[i] / (i + 1);
        result[i] %= (i + 1);
    }
    
    return result;
}

int main() {
    int n;
    cin >> n;
    
    vector<int> result = factorialBase(n);
    
    for (int i = 0; i < result.size(); i++) {
        cout << result[i] << " ";
    }
    
    return 0;
}

首先,我们定义了一个函数factorialBase,它接受一个非负整数n,并返回一个vector,表示n的阶乘进制数的每一位。

factorialBase函数中,我们先处理特殊情况,当n为0时,直接将0添加到结果数组中,并返回。

接下来,我们从低位到高位依次处理n的每一位。我们使用一个while循环,每次取n的个位数,将其插入到结果数组的最前面,然后将n除以10,去掉个位数。这样,我们就将n的每一位从低到高依次添加到结果数组中。

接下来,我们根据阶乘进制数的定义,对结果数组进行处理。我们使用两个for循环来实现。

第一个for循环,从结果数组的第一个元素开始,遍历到倒数第二个元素。在每次循环中,我们将当前元素乘以对应的阶乘数,并将结果保存回当前元素。例如,如果当前元素为3,位置为2,那么我们将其乘以3,结果为9。

第二个for循环,从结果数组的最后一个元素开始,遍历到第一个元素。在每次循环中,我们将当前元素除以对应的阶乘数,并将商保存到前一个元素。同时,我们将当前元素对应的余数保存回当前元素。这样,我们就完成了进位操作。

最后,我们在主函数中读取输入的n,并调用factorialBase函数得到结果数组。然后,我们遍历结果数组,依次输出每一位

请用C++讲解一下这道题:题目描述:由于X城确实发生了严重的疫情小C在进城时受到了阻碍他必须给出进门密码。这个密码给出一个参数n你需要把它转换成阶乘进制数。其中阶乘进制数是指右数第i位满i进一的数举例如下:10-1100-2110-3200-41000-643210=441+331+221+11!+00!=119 输入:一个非负整数n。 输出:按照从高位到低位的顺序依次输出n的阶乘进制数的每一位其

原文地址: https://www.cveoy.top/t/topic/ic9G 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录