例24 数制转换
题目描述
请你编一程序实现两种不同进制之间的数据转换。
输入格式
共三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16),第二行是一个n进制数,若n>10则用大写字母a-f表示数码10-15,并且该n进制数对应的十进制的值不超过1000000000,第三行也是一个正整数,表示转换之后的数的进制m(2≤m≤16)。
输出格式
一个正整数,表示转换之后的m进制数。
输入样例
16
ff
2
输出样例
11111111
(1)编程思路。
十进制整数转换为r进制整数的基本方法是:“除r取余”。具体做法为:对于十进制数整数,用r连续除要转换的十进制整数及各次所得之商,直除到商等于0时为止,则各次所得之余数即为所求r进制整数由低位到高位的值。这个过程可以写成一个简单的循环。
一般而言,对于任意的r进制数 an-1an-2…a1a0可以表示为以下和式:
an-1×rn-1 +…+a1×r1+a0×r0 (其中r为基数)
这个和式也称为“按权展开式”。
r进制数转换为十进制数的基本方法是将r进制数的各位按权展开相加即可。
本例的思路是:将输入的n进制整数按权值展开后转换为十进制整数,再将所得的十进制整数采用“除m取余”转换为m进制整数即可。
(2)源程序。
#include <stdio.h>
int main()
{
char table[17]=”0123456789abcdef”;
int n,m;
char s[33];
scanf(“%d”,&n);
scanf(“%s”,s);
scanf(“%d”,&m);
int num=0;
for (int i=0;s[i]!=’