skew数
来源:互联网 发布:java jvm调优 编辑:程序博客网 时间:2024/05/17 02:56
1. skew数(相邻数字的技术不成等比)
问题描述
在 skew binary 表示中, 第 k 位的值 x k 表示 x k (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、11、12、20、100、101、
以及 102。
输入数据
输入包含一行或多行,每行包含一个整数 n。 如果 n = 0 表示输入结束,否则 n 是一
个 skew 数
输出要求
对于每一个输入,输出它的十进制表示。转换成十进制后, n 不超过 2 31 -1 =
2147483647
输入样例
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。(char stew[32];)
用一个整型数组 base[31],依次存储 skew 数最末位、倒数第 2 位、…..、第 31 位的基
数值。使用这个数组,把每个 skew 数转换成对应的十进制数。
2. 我的思考:和上一题类似……
我的代码:
#include <stdio.h> #include <string.h> long b2ten(char* x, int b) { int ret =0; int sum = 0; int len = strlen(x); for (int i = 0; i < len; i++) { ret *= b;ret += x[i]-'0' ; } ret *= 2; for(int i=0;i<len;i++) { sum += x[i]-'0'; } ret =ret-sum; return (long)ret; }int main() { char stew[32]; long s; while(1) { scanf("%s",stew); s = b2ten(stew,2); printf("%d\n",s); } }
3. 答案代码:
答案的关键在于:寻找到了不同位数的基数的关系,找到了递推表达式!
#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(strcpy(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 0
- skew数
- Skew数
- Skew数
- skew数
- skew数
- skew数
- skew数
- pku_1565 Skew数
- POJ 1565 Skew数
- 题目1129:Skew数
- 3.2poj2973 skew数
- acm skew数
- 题目1129:Skew数
- 3.2例题--skew数--2973
- 百练2973:Skew数
- Skew
- POJ 百练 2973: Skew数
- 九度OJ 题目1129:Skew数
- revit二次开发常用语句 结合二次开发书更好用
- python中写入csv,excel显示、pandas读取csv文件的编码问题
- Android UI测试-Espresso环境搭建及测试(by 星空武哥)
- 构建fabric
- @OneToMany、@ManyToOne以及@ManyToMany讲解
- skew数
- 【转载】Java多线程编程2--同步锁定--synchronized同步方法、脏读、锁重入
- asp.net core 学习资料整理
- Android之Camera预览
- 【Day38】php微信扫码支付源码
- 学习Hadoop第二十八课(java通过调用接口来操作HBase)
- fork创建子进时关于文件操作(fwrite、fread)的那些事
- 红茶一杯话Binder(初始篇)
- 两种排序