XTU-OJ 1150-n!进制

2023-10-25 05:44
文章标签 进制 oj xtu 1150

本文主要是介绍XTU-OJ 1150-n!进制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

n!进制是指每i位的权值是(i+1)!,每一位的系数为0~i+1。 比如n!进制的21 = 2*2! + 1*1! = 5。给你一个10进制数,求其n!进制的值。

输入

每行一个10进制的整数n,0≤n≤3,628,799。

输出

每行输出一个样例的结果。

样例输入
0
1
10
100
3628799
样例输出
0
1
120
4020
987654321

解题思路:本题一看题,又是一个进制转换的题目。使得  n(十进制) = an an-1 ······ a1 a0(p进制).

但是注意,这个题又和普通的 p 进制转换不一样,普通 p 进制转换的方法:  ai = n%p , n/=p。 而这题进制是随位数在变化,ai 不再是通过模运算得到,而是直接等于除运算的 商 。

因为普通p进制的算法是 n = an*p^n-1 + an-1*p^n-2 +·····+ a1*p + a0*1 。 而 n!进制  n = an*(n+1)! + an-1*(n)! +·····+ a1*2! + a0*1!。     一个是指数求和的逆运算,一个是乘法求和的逆运算。

再好的解释都没有一个例子来的生动,大家找个数,模拟一下,就能很容易明白了。

AC代码:

#include <stdio.h>int base[20]= {0,1};
int main()
{for (int i = 2; i <= 10; i ++)                  // 计算 n!base[i] = base[i-1]*i;int n,t,s;while (scanf("%d",&n) != EOF){if ( n == 0 )    {puts("0"); continue;}     for (t = 1; base[t+1] <= n; t ++);          // 找到最接近的进制,从最大的开始while (n){for ( ; t >= 1; t --){s = n/base[t];printf("%d",s);n %= base[t];                }}puts("");}return 0;
}

这篇关于XTU-OJ 1150-n!进制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/280405

相关文章

Linux float int和16进制互相转换

Linux 上float int和16进制互换操作。之前把float转16进制,也就是转成4个字节,方便使用串口传输嘛。使用的方法是: //float 转 16进制float x_pid_p = 15.0;unsigned char * bValue = (unsigned char *)& x_pid_p;printf("%x\t%x\t%x\t%x\n", bValue[0], bVa

二叉树经典OJ练习

个人主页:C++忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C++忠实粉丝 原创 二叉树经典OJ练习 收录于专栏【数据结构初阶】 本专栏旨在分享学习数据结构学习的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 前置说明  1. 单值二叉树 2. 相同的树 3. 对称二叉树 4. 二叉树的前序遍历 5. 二叉树中序遍历 6. 二叉树的后序遍历 7. 另一

java字符串在内存和文件中编码的不同——如何理解进制(二进制)与编码(UTF-8)的关系

不管是在内存中,还是文件中,还是网络传输中,计算机运算和存储的都只能是二进制。 内码是程序内部使用的字符编码,特别是某种语言实现其char或String类型在内存里用的内部编码;外码是程序与外部交互时外部使用的字符编码。 “外部”相对“内部”而言;不是char或String在内存里用的内部编码的地方都可以认为是“外部”。例如,外部可以是序列化之后的char或String,或者外部的文件、命令

趣闻进制转换

输入一个十进数,将其转换成 N (大于0小于16)进制数 public class text5 {/*** 输入一个十进数,将其转换成 N 进制数(0<N<=16)。*/public static void main(String[] args) {char arr[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A','B

Java实现任意进制转换

问题:将m进制num转换为n进制 (2 <= m,n <= 62) ? 总体思路是:先将m进制转换为10进制,再将10进制转为n进制。 1、m进制数num转为10进制 从低位到高位按权展开即可。 例如:8进制1356 转为10进制 6*8^0 + 5 * 8^1 + 3 * 8^2 + 1 * 8^3 = 750 2、10进制转为n进制 采用除留取余,逆序排列。 例如:10进制65

qt unicode编码到16进制符号字符串

QByteArray uEncodeSymbol(const QString &resStr) { // 如何把Unicode中文字符串以\u十六进制方式显示? // 比如: 汉字中文显示成\u07a0\u045an\u02c8 // 解码思路如下: 先把unicode 转换成10进制 大于ascii码就进行转换 QByteArray desStr;

Qt 解码unicode 16进制符号字符串

QString uDecodeSymbol(const QByteArray &resStr) { // 如何把16进制的unicode编码音标显示在窗口中? // 比如: \u07a0[\u045an\u02c8ta\u076at(\u0251)lm\u0249nt] // 解码思路如下: 先把16进制unicode编码转换为 10进制unicode编码

vb.net 十进制转为34进制

Function F_10to34(n As Long) As StringDim strResult As String = String.EmptyDim s As Strings = "0123456789ABCDEFGHJKLMNPQRSTUVWXYZ"DostrResult = Mid(s, (n Mod 34) + 1, 1) & strResultn = n \ 34Loop

C++数据格式化6 - uint转换成二六进制字符串

1. 关键词2. strfmt.h3. strfmt.cpp4. 测试代码5. 运行结果6. 源码地址 1. 关键词 C++ 数据格式化 字符串处理 std::string int bin 跨平台 2. strfmt.h #pragma once#include <string>#include <cstdint>#include <sstream>#include <iomanip

【信息学奥赛】CSP-J/S初赛04 进制转换相关问题(二、八、十六进制与十进制互相转换)

​ 大家好,我是bigbigli,今天我们学习初赛中常考的一个数学内容——进制转换 进制转换 常用的数制 权:数制中某一位上的1所表示的数值的大小,比如十进制中的123,1的位权是100,2的位权是10,3的位权是1。 进制基数基数个数进数规律十进制0 1 2 3 4 5 6 7 8 910逢十进一二进制0 12逢二进一八进制0 1 2 3 4 5 6 78逢八进一十六进制0 1