转换函数

本文最后更新于:2024年5月18日 下午

题目:

实现十进制数字到任意进制的转换函数:
1
2
3
4
5
void baseConverter(int dec,int base);
//其中base为转换的基数
//示例:
-->input :250, 16
-->output :FA

查资料:

基数:在一种数制中,只能使用一组固定的数字来表示数的大小,这组固定的数字的个数就称为该计数制的基数(Base)。例如十进制的基数为10,二进制的基数为2等。

权:又称为位权或权值,即每一个数位都有一个固定的基值与之相对应,称之为权。如十进制的个位对应的权值为1(100),十位对应的权值为10(101),百位对应的权值为100(102)。对于一个 M 进制的数来说,小数点左边各位上对应的权值从右到左分别为基数的0次方、基数的1次方、基数的2次方等,对于小数点右边各位上对应的权值从左到右分别为基数的-1次方、基数的-2次方等。
二进制、八进制、十六进制向十进制转换:按权展开相加。
十进制转换成二进制、八进制、十六进制:整数部分除以基数取余数(取余的方向为从后向前);小数部分乘以基数取整数(取整的方向为从前向后)。
二进制、八进制、十六进制相互转换:先转换成十进制再转换成其他进制;或者按照其对应关系进行转换(三位二进制数对应一位八进制数,四位二进制数对应一位十六进制数)。

算法设计:

十六进制是由 0~F 这一组固定的数字来表示,所以釆用字符数组进行存储。
在执行程序时可以输入多组数据来验证程序的正确性

程序源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

#include<stdio.h>
void baseConverter(int a, int b)
{
int i = 0, j, num[20];
char k[] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' };
do {
i++;
num[i] = a % b;
a /= b;
} while (a != 0);
for (j = i; j >= 1; j--)
printf("%c", k[num[j]]);
}

int main()
{
int i,j;
scanf("%d,%d", &i, &j);
baseConverter(i,j);
}

运行实例:


转换函数
https://forever0823.github.io/2022/11/15/work1/
作者
Alan
发布于
2022年11月15日
许可协议