相邻数字的基数不等比:skew 数
2016-06-15 06:40
375 查看
问题描述
在 skew binary 表示中,第k位的值Xk X (2^(k+1)-1)。每个位上的可能数字是0或1,最后一个非零位可以是2,例如,10 120(skew) = 1X(2^5 -1) + 0X(2^4 -1) + 1X(2^3 -1) + 2X(2^2 -1) + 0X(2^1 -1) = 31+0+7+6+0=44。前10个skew数是0、1、2、10、11、12、20、100、101以及102。
输入数据
输入包含一行或多行,每行包含一个整数n。如果n=0,表示输入结束,否则n是一个skew数。
输出要求
对于每一个输入,输出它的十进制表示。转换成十进制后,n不超过2^31 - 1 = 2 147 483 647。
输入样例
10120
200000000000000000000000000000
10
1000000000000000000000000000000
11
100
11111000001110000101101102000
0
输出样例
44
2147483646
3
2147483647
4
7
1041110737
解题思路
skew数的相邻位上基数之间没有等比关系。计算每一位的基数后,再把一个skew数转换成十进制表示就很简单。对于长度为k的skew数,最后一位数字的基数为2^k-1。由于转换成十进制后,n不超过2^31-1,因此输入skew数的最大长度不超过31。
用一个整型数组base[31],依次存储skew数最末位、倒数第二位、……、第31位的基数值。使用这个数组,把每个skew数转换成对应的十进制数。
参考程序
在 skew binary 表示中,第k位的值Xk X (2^(k+1)-1)。每个位上的可能数字是0或1,最后一个非零位可以是2,例如,10 120(skew) = 1X(2^5 -1) + 0X(2^4 -1) + 1X(2^3 -1) + 2X(2^2 -1) + 0X(2^1 -1) = 31+0+7+6+0=44。前10个skew数是0、1、2、10、11、12、20、100、101以及102。
输入数据
输入包含一行或多行,每行包含一个整数n。如果n=0,表示输入结束,否则n是一个skew数。
输出要求
对于每一个输入,输出它的十进制表示。转换成十进制后,n不超过2^31 - 1 = 2 147 483 647。
输入样例
10120
200000000000000000000000000000
10
1000000000000000000000000000000
11
100
11111000001110000101101102000
0
输出样例
44
2147483646
3
2147483647
4
7
1041110737
解题思路
skew数的相邻位上基数之间没有等比关系。计算每一位的基数后,再把一个skew数转换成十进制表示就很简单。对于长度为k的skew数,最后一位数字的基数为2^k-1。由于转换成十进制后,n不超过2^31-1,因此输入skew数的最大长度不超过31。
用一个整型数组base[31],依次存储skew数最末位、倒数第二位、……、第31位的基数值。使用这个数组,把每个skew数转换成对应的十进制数。
参考程序
#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; 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; }
相关文章推荐
- 125. Valid Palindrome
- b1.0 MFC的控制台程序
- b0.0 MFC应用程序编程
- 数据结构与算法之十一 图
- 数据结构与算法之十一 图
- 数据结构与算法之十一 图
- Implement strStr() - Javascript
- Add Binary - Javacript
- java中的反射,invoke方法
- Cinder 组件详解 - 每天5分钟玩转 OpenStack(47)
- Cinder 组件详解 - 每天5分钟玩转 OpenStack(47)
- Cinder 组件详解 - 每天5分钟玩转 OpenStack(47)
- Sql server使用Merge关键字做插入或更新操作
- YYCache源码分析(二)
- 122. Best Time to Buy and Sell Stock II
- 自定义滑动开关按钮-SwitchButton
- 文章标题
- Longest Common Prefix - Javacript
- 121. Best Time to Buy and Sell Stock
- 传智播客c/c++公开课学习笔记--Linux网络流媒体服务器的核心代码揭秘