图解洛谷P1143进制转换

本文详细解析了进制转换的算法实现,通过实例演示如何将任意进制数转换为十进制,再从十进制转换为目标进制数。文章包含完整的C++代码示例,适合初学者理解和掌握进制转换的原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进制转换

题目连接

题目描述

请你编一程序实现两种不同进制之间的数据转换。

输入格式
共三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16),第二行是一个n进制数,若n>10则用大写字母A-F表示数码10-15,并且该n进制数对应的十进制的值不超过1000000000,第三行也是一个正整数,表示转换之后的数的进制m(2≤m≤16)。
输出格式
一个正整数,表示转换之后的m进制数。

样例输入:
16
FF
2
样例输出:
11111111

解题思路

比较菜,所以用的也是很容易想到的一种方式,先将n进制数转换成10进制数,然后再用10进制数转换成m进制数。

十进制转换成m进制数是比较简单的,就是除m取余。

那么n进制数转换成10进制呢,我们拿2进制数来举例,其他的都是类似的。比如现在有个2进制数是 1110,那么我们转换成10进制数字时,一般就是1*2^3+1*2^2 + 1*2^1 + 0*2^0 ,如图
在这里插入图片描述

代码如下

#include<bits/stdc++.h>
using namespace std;
map<char,int>mp;
int main() {
	mp['1'] = 1;mp['2'] = 2;mp['3'] = 3;
	mp['4'] = 4;mp['5'] = 5;mp['6'] = 6;
	mp['7'] = 7;mp['8'] = 8;mp['9'] = 9;
	mp['0'] = 0;mp['A'] = 10;mp['B'] = 11;
	mp['C'] = 12;mp['D'] = 13;mp['E'] = 14;mp['F'] = 15;
	int n,m;
	char s[100];
	char a[100];
	scanf("%d",&n);
	scanf("%s",s);
	scanf("%d",&m);
	int x = 0;
	for(int i = 0; i<strlen(s); i++) {//n进制转换为10进制
		x = x*n+mp[s[i]]; //就是上面那个图所解释的
	}
	int l = 0;
	while(x>0) { //10进制转换为m进制
		l++;
		int cnt = x%m;
		if(cnt>9) {
			a[l] = cnt+'A'-10;
		}
		else {
			a[l] = cnt + '0';
		}
		x /= m;
	}
	for(int i = l; i>0; i--) { //倒序输出
		printf("%c",a[i]);
	}
} 
p1464 是一道经典的动态规划问题,也被称为函数的图解问题。这道题的题目描述如下: 给定一个整数函数 f(x),其中 x 是一个非负整数。函数满足以下性质: 1. f(0) = 1 2. f(x) = f(x-1) + f(x/2) + f(x/3),其中 x > 0 且 x 可以整除 2 或 3。 题目要求计算 f(x) 的值,给定的 x 是一个非负整数。 解题思路是使用动态规划来求解。我们可以定义一个数组 dp,其中 dp[i] 表示 f(i) 的值。根据题目给出的性质,可以得到递推关系式: dp[i] = dp[i-1] + dp[i/2] + dp[i/3] 在实际求解中,我们从小到大计算 dp[i] 的值,直到计算到 dp[x] 的值为止。最终得到的 dp[x] 即为所求函数值。 以下是对于 x = 10 的计算过程示例: 1. 初始化 dp 数组:dp = 1。 2. 计算 dp:dp = dp + dp + dp = 1 + 1 + 1 = 3。 3. 计算 dp:dp = dp + dp + dp[0] = 3 + 3 + 1 = 7。 4. 计算 dp:dp = dp + dp + dp[1] = 7 + 3 + 3 = 13。 5. 计算 dp:dp = dp + dp + dp[1] = 13 + 7 + 3 = 23。 6. 计算 dp:dp = dp + dp + dp[1] = 23 + 7 + 3 = 33。 7. 计算 dp:dp = dp + dp + dp = 33 + 13 + 7 = 53。 8. 计算 dp:dp = dp + dp + dp = 53 + 13 + 7 = 73。 9. 计算 dp:dp = dp + dp + dp = 73 + 23 + 13 = 109。 10. 计算 dp:dp = dp + dp + dp = 109 + 23 + 13 = 145。 11. 计算 dp[10]:dp[10] = dp + dp + dp = 145 + 33 + 23 = 201。 所以,f(10) 的值为 201。 这就是 p1464 function图解的解题思路和计算过程。希望能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值