这是今天一个比较小的练习题,但是我想通过这个来试一试普遍的方法,也就是说自己写个方法,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); }
用递归实现会非常简单,非递归代码量会很大。
注:没有写负数的进制转换
几个测试了都正确
赶紧睡觉不行了。。。