进制转换(无负数)

简介: 这是今天一个比较小的练习题,但是我想通过这个来试一试普遍的方法,也就是说自己写个方法,SysConvert(进制转换),两个参数,第一个就是源头数source_num,第二个就是目标进制destination_sys

这是今天一个比较小的练习题,但是我想通过这个来试一试普遍的方法,也就是说自己写个方法,SysConvert(进制转换),两个参数,第一个就是源头数source_num,第二个就是目标进制destination_sys

源头就是自己随便写个数,目标进制就是自己想要什么样的进制,然后return 目标进制数就好了。

int main()
{
  int num = 0;
  int destination_sys = 0;
  printf("请输入想要转换的数:>");
  scanf("%d%d",&num,&destination_sys);
  printf("%d", SysConvert(num,destination_sys));
  return 0;
}

为了说的方便这里我分开代码,上面是主函数只需要实现SysConvert()功能就好。


功能实现SysConvert(int source_num, int destination_sys)

int SysConvert(int source_num, int destination_sys)
{
  int dbuf[1000] = { 0 };//这个是存放转换后的进制数组,也就是缓存区
  int i = 0;//这个是下标变量
  int len = 1;//这个是长度标记
  int destination_sys_num = 0;//这个也就是我们需要返回的转换进制数
  dbuf[i] = source_num;//这个绝对不能忘,他就是不足转换进制数直接输出的,牛客上就没有这段代码,所以有一点bug
  while (source_num>=destination_sys)
  {
    dbuf[i] = source_num % destination_sys;//取模放在数组第一个位置
    dbuf[i+1] = source_num / destination_sys;//除以,就放在前一个位置
    source_num = source_num / destination_sys;
    i++;//下标加加
    len++;//循环结束也就是len出来了
  }
  while (len>0)//这里就是len的重要性
  {
    destination_sys_num += dbuf[len - 1] * (int)power_num(10, len - 1);//这里刚好可以运用我们写的n的k次方来操作,我是返回double类型的所以这里强转int类型
    len--;//len到0的那一刻就是转换进制数跑出来的那一刻
  }
  return destination_sys_num;
}


n的k次方实现

double power_num(int num, int power)
{
  if (power > 0)
    return num * power_num(num, power - 1);
  else if (power == 0)
    return 1.0;
  else
    return 1.0 / power_num(num, -power);
}

用递归实现会非常简单,非递归代码量会很大。


注:没有写负数的进制转换

image.png

几个测试了都正确

赶紧睡觉不行了。。。


目录
相关文章
|
1月前
二进制转换为十进制
【10月更文挑战第27天】二进制转换为十进制。
89 8
|
1月前
八进制转换为十进制
【10月更文挑战第27天】八进制转换为十进制。
66 2
|
2月前
适用正数和负数
【10月更文挑战第21天】适用正数和负数。
29 2
|
6月前
|
存储
详细讲解,进制转换
详细讲解,进制转换
105 0
|
2月前
【编程基础知识】正数负数的二进制位运算(左移 右移 无符号右移)
正数和负数需转换成二进制后进行移位运算。左移低位补0,不影响符号位;右移符号位跟随移动,最高位还原为原符号位;无符号右移高位补0,适用于负数处理。
121 0
|
7月前
|
C语言
进制转换间的那点事
进制转换间的那点事
|
7月前
|
存储
进制转换和整型提升
进制转换和整型提升
|
小程序
ABCDEFG(进制转换::小转大)
ABCDEFG(进制转换::小转大)
96 0
下一篇
DataWorks