|
规则:
1. 不能使用循环, 调用的命令内部有也不行
2. 只能使用基础数值运算符和位运算
3. 尽量减少代码量
基础数值运算符只有
加法 减法 乘法 除法 求余数
简单说一下题目解法方向
再简单的说一下2的次方在二进制上有什么变化0000 0000 0000 0000 0000 0000 0000 0000
这里是32个位, 从右边往左边数, 0-31, 一共32位, 2的n次方就是对应的位是1
比如, 2的17次方, 那就是从右往左数到第17位, 从0开始数, 第17位为1, 其他都为0
0000 0000 0000 0010 0000 0000 0000 0000
再比如, 2的0次方, 那就是第0位为1
0000 0000 0000 0000 0000 0000 0000 0001
也可以这样理解, 2的n次方的二进制 = 1+n个0
现在知道了2的n次方的二进制是这样的
那是不是可以判断我这个二进制只有一个位为1就是2的n次方了吗
所以这题的解法就是如何判断某个数值是否只有一个位为1
下面是我的代码, 请自己想之后再来看我的代码
我的代码很简单, 就3行
窗口程序集名 | 保 留 | 保 留 | 备 注 | 窗口程序集_启动窗口 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 数值 | 整数型 | | | 结果 | 逻辑型 | | | 信息框文本 | 文本型 | | | 信息框标题 | 文本型 | | | 信息框图标 | 整数型 | | |
数值 = 到整数 (编辑框1.内容 )结果 = 是否是2的n次方 (数值 )信息框文本 = “输入数值10进制: ” + 到文本 (数值 ) + #换行符 信息框文本 = 信息框文本 + “输入数值16进制: 0x” + 取文本右边 (“00000000” + 取十六进制文本 (数值 ), 8 ) + #换行符 信息框文本 = 信息框文本 + “输入数值二进制: ” + 到二进制 (数值 ) + #换行符 判断 (结果 )信息框标题 = “是2的n次方”信息框图标 = #信息图标 信息框标题 = “不是2的n次方”信息框图标 = #错误图标 信息框 (信息框文本, 信息框图标, 信息框标题, 取窗口句柄 ()) 返回 (假)bit = 取重复字节集 (32, { 48 }) 计次循环首 (32, i )如果真 (__query_bit (十进制数, i - 1 )) bit [32 - i + 1 ] = 49 计次循环尾 ()返回 (到文本 (bit )) |
__query_bit | 逻辑型 | | |
num | 整数型 | | | | bit | 字节型 | | | | 置入代码 ({ 138, 77, 12, 51, 192, 128, 249, 32, 115, 14, 139, 69, 8, 133, 192, 116, 7, 51, 219, 67, 211, 227, 35, 195, 201, 194, 8, 0 }) 返回 (假)
上传一个模板源码, 源码比上面贴出的代码就多了个界面而已
是否是2的n次方.e
(5.69 KB, 下载次数: 2)
|
|