Bailian2973 Skew数【进制】

2973:Skew数
总时间限制: 1000ms 内存限制: 65536kB
描述
在 skew binary表示中, 第 k 位的值xk表示xk(2k+1-1)。 每个位上的可能数字是0 或 1,最后面一个非零位可以是2, 例如, 10120(skew) = 1(25-1) + 0(24-1) + 1(23-1) + 2(22-1) + 0(21-1) = 31 + 0 + 7 + 6 + 0 = 44. 前十个skew数是 0、1、2、10、11、12、20、100、101、以及102。
输入
输入包含一行或多行,每行包含一个整数n。 如果 n = 0 表示输入结束,否则n是一个skew 数
输出
对于每一个输入,输出它的十进制表示。转换成十进制后, n 不超过 231-1 = 2147483647
样例输入
10120
200000000000000000000000000000
10
1000000000000000000000000000000
11
100
11111000001110000101101102000
0
样例输出
44
2147483646
3
2147483647
4
7
1041110737
来源
Mid-Central USA 1997, POJ 1565, 程序设计实习2007

问题链接Bailian2973 Skew数
问题描述:(略)
问题分析
????简单的进制有关的问题,看懂题意应该就没有问题了。
程序说明
????本题与参考链接是同一题,使用参考链接的程序提交就AC了。
参考链接POJ1565 ZOJ1712 UVA575 UVALive5320 Skew Binary【进制】
题记:有关2进制的计算,移位运算符是好用的!

AC的C语言程序(优化枚举)如下:

/* POJ1565 ZOJ1712 UVA575 UVALive5320 Skew Binary */

#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std;

const int N = 32;
char s[N + 1];

int main()
{
    while (gets(s) && s[0] != '0') {
        int len = strlen(s), ans = 0;
        for (int i = 0 ;i < len; i++)
            ans += (s[i] - '0') * ((1 << (len - i)) - 1);
        printf("%d\n", ans);
    }

    return 0;
}

原文地址:https://www.cnblogs.com/tigerisland45/p/10163249.html

时间: 2024-08-02 14:00:34

Bailian2973 Skew数【进制】的相关文章

HDOJ(HDU) 2502 月之数(进制)

Problem Description 当寒月还在读大一的时候,他在一本武林秘籍中(据后来考证,估计是计算机基础,狂汗-ing),发现了神奇的二进制数. 如果一个正整数m表示成二进制,它的位数为n(不包含前导0),寒月称它为一个n二进制数.所有的n二进制数中,1的总个数被称为n对应的月之数. 例如,3二进制数总共有4个,分别是4(100).5(101).6(110).7(111),他们中1的个数一共是1+2+2+3=8,所以3对应的月之数就是8. Input 给你一个整数T,表示输入数据的组数,

oj---九度oj----大数---进制转换

struct bigInteger{ int digit[maxDigits]; int size; } 这里digit每一位的权重都乘以10000: 如果不是特别大的数,没必要:乘以10000后,把字符串转化为数字比较麻烦 #include<cstdio> #include<cstring> #define maxDigits 100 struct bigInteger{ int digit[maxDigits]; int size; void init(){ for(int i

SOJ4453 Excel列数 进制转换

描述 我们都知道Excel的列数是用字母表示的,比如第1列对应A,第27列对应AA. 假设给定一个正整数n,你能给出它所对应的字母表示么? 输入格式 程序需要读入多个测试样例,每个测试样例中: 一个正整数n(0 < n < 200000) 输出格式 对每个测试样例: 所对应的字母表示 样例输入 26 171135 样例输出 Z ISDC 资源约定 峰值内存消耗 < 256M CPU消耗 < 2000ms 请严格按要求输出,不要画蛇添足地打印类似:"请您输入..."

C++实现将十进制数转换为小于等于九的任意进制

//十进制转换为小于等于九的任意进制数 #include<iostream> #include<string> #include<stack> using namespace std; stack<int> num; void change(int N,int M) { if(N<0||M<=1) { cout<<"error!"<<endl; return; } while(N>0) { num

HDU4814——数学,模拟进制转换

本题围绕:数学公式模拟进制转换 HDU4814 Golden Radio Base 题目描述 将一个十进制的非负整数转换成E(黄金分割数)进制的数 输入 不大于10^9的非负整数,处理到文件尾 输出 转换成的E进制数(可能含有小数) 样例输入 1 2 3 6 10 样例输出 1 10.01 100.01 1010.0001 10100.0101 题目分析 对于本题,要注意的点有:首先对于一个十进制的正数,我们是可以严格转换成一个E(黄金分割数)进制的数的,而不是涉及到约等于,例如10-base的

1. 硬件基本认知 ; 进制转换 2019-10-27

1.1 计算机硬件基本认知 cpu: 中央处理器. 相当于人的大脑.运算中心,控制中心. 内存: 临时存储数据. 优点:读取速度快. 缺点:容量小,造价高,断电即消失. 硬盘: 长期存储数据. 优点:容量大,造价相对低,断电不消失. 缺点:读取速度慢. 操作系统:统一管理计算机软硬件资源的程序 1.2 计算机文件大小单位 b = bit  位(比特) B = Byte 字节 ? 1Byte = 8 bit  一个字节等于8位 可以简写成 1B = 8b 1KB = 1024B 1MB = 102

函数+进制转换器

一.运行截图 注释:正常操作由二进制数转换为八进制数. 注释:如果输入输出前后进制类型相同,输出输入的值. 注释:如果输入进制类型不是规则给定的,输出错误. 注释:如果输入进制类型不是规则给定的,输出错误. 注释:如果输入的数与该数进制类型不符,输出错误. 二.函数介绍 ①二进制→八进制 void twoTOeight(int x){ if(x%10>1){ printf("ERROR!"); return; } int result1=0,result2=0,i=0,remai

1813. M进制数问题

1813. M进制数问题 Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description 试用 C++的类来表示一般进制数. 给定 2 个n位m进制整数A和B,计算m进制数整数P = A / B (向下取整)与 Q = A % B的值. Input 输入包含多个测试点.第一行为一个整数T,表示测试点数. 对于每个测试点第 1 行是进制 m .第 2 行和第 3 行分别给出 m 进制整数 A 和 B. 所有 m 进制数的10进制表示均

2^k进制数

[题目描述] 设R是个2^k进制数,并满足以下条件: (1)R至少是个2位的2^k进制数: (2)作为2^k进制数,除最后一位外,R的每一位严格小于它右边相邻的那一位: (3)将R转换为2进制数q后,则q的总位数不超过w: 在这里,正整数k(1 ≤ k ≤ 9)和w(k < w ≤30000)是事先给定的. 询问满足上述条件的不同的r共有多少个. 我们再从另一角度作些解释: 设S是长度为w的01字符串(即字符串S由w个“0”或“1”组成),S对应于上述条件(3)中的q.将S从右起划分为若干个长度