ACM-skew数(数制转化问题)
来源:互联网 发布:java io 实现断点续传 编辑:程序博客网 时间:2024/05/17 23:33
问题描述
输入数据
输入包含一行或多行,每行包含一个整数 n。 如果 n = 0 表示输入结束,否则 n 是一个 skew 数
输出要求
对于每一个输入,输出它的十进制表示。转换成十进制后, n 不超过 2的31次-1(2147483647)
输入样例
1012020000000000000000000000000000010100000000000000000000000000000011100111110000011100001011011020000
输出样例
44214748364632147483647471041110737
解题思路
skew 数的相邻位上,基数之间没有等比关系。计算每一位的基数后,再把一个 skew 数转换成十进制表示就很简单。对于长度为 k 的 skew 数,最后一位数字的基数为 2的k次-1。由于转换成十进制后, n 不超过 2的3次1-1,因此输入 skew 数的最大长度不超过 31。
用一个整型数组 base[31],依次存储 skew 数最末位、倒数第 2 位、 …..、第 31 位的基数值。使用这个数组,把每个 skew 数转换成对应的十进制数。
base[0] = 1base[k] = 2的(k+1)次 - 1 = 2 * (2的k次 - 1) + 1 = 2 * base[k -1] + 1
参考程序
#include <iostream>#include <cstring> using namespace std;int main(){int i,k,base[31],sum;char skew[32];for(i=1;i<31;i++){base[i]=2*base[i-1]+1;//计算每一位的基数} while(true){cin>>skew;if(strcmp(skew,"0") == 0){break;}sum = 0;k = strlen(skew);for(i=0;i<strlen(skew);i++){k--;//把每个 skew 数转换成对应的十进制数sum += (skew[i]-'0')*base[k];}cout<<sum<<endl;}return 0;}
0 0
- ACM-skew数(数制转化问题)
- 数制转换问题:skew
- acm skew数
- ACM-确定进制(数制转化问题)
- 百炼-2973-Skew数-C语言-数制转换
- 数制转化
- 数制转化
- skew数
- Skew数
- Skew数
- skew数
- skew数
- skew数
- skew数
- 数,数制
- python中数制转化
- 有关数制转化
- pku_1565 Skew数
- 关闭DrawerLayout的手势滑动
- 改变exe文件图标的方法
- 【hdu2896】病毒侵袭
- 阮小二买彩票
- pat a1007
- ACM-skew数(数制转化问题)
- android cmd 下命令行
- linux grep命令详解
- 安装Microsoft Hololens开发环境
- 【JQuery】动态控制页面元素
- 简单谈谈JavaScript中的this
- PWM (2541)控制无源蜂鸣器发出不同的声音
- 【java总结】TCP/UDP
- Python 清屏问题的解决