「这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战」
这是今天一个比较小的练习题,但是我想通过这个来试一试普遍的方法,也就是说自己写个方法,SysConvert(进制转换),两个参数,第一个就是源头数source_num,第二个就是目标进制destination_sys
源头就是自己随便写个数,目标进制就是自己想要什么样的进制,然后return 目标进制数就好了。
{
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 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次方实现
{
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);
}
用递归实现会非常简单,非递归代码量会很大。
注:没有写负数的进制转换
几个测试了都正确
再来一个智力题
==题目:==有1000瓶药物,但是其中有一瓶是有毒的,小白鼠吃了一个星期以后就会死掉!请问,在一个星期内找出有毒的药物,最少需要多少只小白鼠?
这题看似很难,但是仔细找规律的话还是可以发现一些端倪的
可能1000很多,但我们从最简单的接触再延伸到1000就会感觉简单一点
一瓶
假如就是一瓶,需要多少只小鼠呢
两瓶
假如两瓶呢
三瓶(自想一法)
3瓶就能彩到规律了,再不济你就4次
三瓶(序号规则)
这是验证了想法的确可行,但序号是不是有点不好看想有顺序一点00 01 10然后赋予他老鼠吃药的思想
四瓶(验证指数)
指数2就是两只鼠 那4也是2也就意味着也是两只鼠吗,所以假如4瓶药
九瓶(验证猜想)
一千瓶