
数值转换问题(二)相邻数字的基数不等比:skew数
发布日期:2021-05-07 18:29:22
浏览次数:21
分类:技术文章
本文共 1240 字,大约阅读时间需要 4 分钟。
数值转换问题(二)
相邻数字的基数不等比:skew数
在 skew binary表示中, 第 k 位的值xk表示xk×(2^(k+1)-1)。 每个位上的可能数字是0 或 1,最后面一个非零位可以是2, 例如, 10120(skew) = 1×(2^5-1) + 0×(2^4-1) + 1×(2^3-1) + 2×(2^2-1) + 0×(2^1-1) = 31 + 0 + 7 + 6 + 0 = 44. 前十个skew数是 0、1、2、10、0 = 44. 前十个skew数是 0、1、2、10、 11、12、20、100、101、以及102。 输入数据 输入包含一行或多行,每行包含一个整数n。 如果 n = 0 表示输入结束,否则n是一个skew 数 输出要求 对于每一个输入,输出它的十进制表示。转换成十进制后, n 不超过 231-1 = 2147483647
代码 #include <stdio.h> #include <string.h> int main(){ int i,k,base[31],sum; char skew[32]; base[0]=1; for(i=1;i<31;i++) base[i]=2*base[i-1]+1; // base[i]=2^(i+1)-1=2 *( 2 ^ i -1)+1=2 * b[i-1]+1 while(1){ scanf("%s",skew); if(strcmp(skew,“0”)==0) break; sum=0; k=strlen(skew); for(i=0;i<strlen(skew);i++){ k–; sum+=(skew[i]-‘0’)*base[k]; } printf("%d\n",sum); } return 0; } 题目分析 (1)skew数的相邻位上,基数之间没有等比关系。计算完每一个基数,再转换为十进制。对于长度为k的skew数,最后一位数字的基数为2^(k-1)。由于转换成十进制后, n 不超过 2^(31-1),因此输入skew数的最大长度不超过31。 (2) 用一个整型数组base[31],依次存储skew数最末位、倒数第2位、……、第31位的基数值。使用这个数组,把每个skew数转换成对应的十进制数。总结
(1)最后一位是0位,即k=0。所以根据公式带入的时候倒数第5个数实际上是第6位。 (2)**strcmp:**函数比较两个字符串,设这两个字符串为str1,str2, 若str1==str2,则返回零; 若str1<str2,则返回负数; 若str1>str2,则返回正数。 (3)base[i]=2^(i+1)-1=2 *( 2 ^ i -1)+1=2 * b[i-1]+1 要通过base[k]计算出数值,找出base[i]与base[i-1]的关系,通过数学计算找出关系。 但是直接用2^(i+1)-1计算出结果错误,实在不知为什么不对。发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年03月24日 03时40分31秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
875 爱吃香蕉的珂珂(二分查找)
2019-03-04
450 删除二叉搜索树中的节点(递归删除节点)
2019-03-04
python测试代码耗时
2019-03-04
桌面图标的自动排列图标
2019-03-04
第十一届蓝桥杯python组第二场省赛-数字三角形
2019-03-04
蓝桥杯四平方和(暴力)
2019-03-04
手机号码(数位dp-dfs)
2019-03-04
算法训练 Anagrams问题
2019-03-04
Linux-文件目录类常用指令3
2019-03-04
搜索查找类指令
2019-03-04
数字三角形的无返回值的深度优先搜索解法
2019-03-04
完全背包问题的简化思路
2019-03-04
Jquery添加元素
2019-03-04
Jquery使用需要下载的文件
2019-03-04
Spring中如何传递参数的问题
2019-03-04
BST中某一层的所有节点(宽度优先搜索)
2019-03-04
广度优先搜索
2019-03-04
对于递归的理解
2019-03-04
二分查找(递归)
2019-03-04
猜字母
2019-03-04