2973:Skew数
 
描述
在 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 不超过 2^31-1 = 2147483647
样例输入
10120
200000000000000000000000000000
10
1000000000000000000000000000000
11
100
11111000001110000101101102000
0
样例输出
44
2147483646
3
2147483647
4
7
1041110737

我最开始的解法:

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
int skewToTen(char *a)
{
int len=strlen(a);
int ret=;
for(int i=len-;i>=;i--)
{
int x=a[i]-'';
ret+=x*( pow((double),len--i+)-);
}
return ret;
} int main()
{
char a[];
while(scanf("%s",a)&&atoi(a)!=)
{
int ret=skewToTen(a);
printf("%d\n",ret); }
}

效率很低,没有考虑数组应该开多大?

如何确定数组应该开多大?可以这样分析,如最大开一个长度为k的skew数,最后一个数组的基数为(2^k-1);

由于转成10进制后,n不超过 2^31-1 ;因此skew数最大长度不超过31.数组开32就可以了。

 用一个整形数组base[31],依次存储skew数最末位,倒数第二位,。。。。。。。。。。第31位的基数值,使用

这个数组,把每个skew数换成对应的十进制数。

base[0]=1

base[k]=2^(k+1)-1=2*(2^k)+1=2*base[k-1]+1;

生成递推公式。

判断输入的字符串是否为0用了strcmp函数。

#include<stdio.h>
#include<string.h>
int main()
{ int i,k,base[],sum;
char skew[];
base[]=;
for(int i=1;i<31;i++) base[i]=2*base[i-1]+1;
while()
{
scanf("%s",skew);
if(strcmp(skew,"")==)
break;
sum=;
k=strlen(skew);
for(i=;i<strlen(skew);i++)
{
k--;
sum+=(skew[i]-'')*base[k];
}
printf("%d\n",sum);
} }

现在程序的效率就很高了。

相邻数字的基数不等比:skew数的更多相关文章

  1. 相邻数字的基数等比确定进制问题pojg2972

    解决数制转换问题时,如果所给的数值不是用十进制表示的,一般用一个字符型数组来存放,数组的每个元素分别存储它的一位数字.然后按位转换求和,得到十进制表示,再把十进制转成成其他所求的进制表示.转成的结果也 ...

  2. 九度OJ 1129:Skew数 (大数运算)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:734 解决:548 题目描述: 在 skew binary表示中, 第 k 位的值xk表示xk*(2k+1-1).  每个位上的可能数字是0 ...

  3. ✡ leetcode 164. Maximum Gap 寻找最大相邻数字差 --------- java

    Given an unsorted array, find the maximum difference between the successive elements in its sorted f ...

  4. Project Euler 104:Pandigital Fibonacci ends 两端为全数字的斐波那契数

    Pandigital Fibonacci ends The Fibonacci sequence is defined by the recurrence relation: F[n] = F[n-1 ...

  5. 百练 2973 Skew数 解题报告

    思路: 计算出每一个skew数的不同位数表示的权值,然后用该位与权值相乘.用int数组来装权值,用char数组来装skew数. 代码: #include<stdio.h> #include ...

  6. Android中为图标加上数字--用于未读短信数提醒,待更新应用数提醒等

    本文属于原创,转载请著名出处:http://flysnow.iteye.com/blog/906770 写道 在我们开发一些如短消息.应用商店等应用时,会考虑在短消息的图标上加上未读短信的数量,在应用 ...

  7. 题解 P2674 【《瞿葩的数字游戏》T2-多边形数】

    题目说了很清楚,此题找规律,那么就找规律. 我们观察数列. 令k表示数列的第k个数. 三角形数:1 3 6 10 15 两项相减:1 2 3 4 5 再次相减:1 1 1 1 1 四边形数:1 4 9 ...

  8. HW输入字符串长度,字符串,计数m。从前往后计数,当数到m个元素时,m个元素出列,同时将该元素赋值给m,然后从下一个数计数循环,直到所有数字都出列,给定的数全部为大于0的数字。输出出队队列。

    package huawei; import java.util.Scanner; public class 约瑟夫环 { private static class Node { public int ...

  9. USACO 状压DP练习[3]

    1725 题意:$m*n:\ m,n \le 12$的牧场,有的格子不能选,相邻不能同时选,求方案数 $f[i][j]$前$i$行当前行选的集合为$j$ #include <iostream&g ...

随机推荐

  1. 初学MVC

    学习MVC基础:C#. ADO.NET .html.javascript.ASP.Net .WebFrom MVC模式两种理解:一种是表现模式,另一种是架构模式.它将应用程序分成三个主要的组件:视图( ...

  2. 读取jar包里面的文件

    一.最近做项目的时候,师兄要求读取jar包里面的java文件.在网上查了各种文件以后,终于完成了,在这里和各位朋友分享一下. (一)找到jar包所在的位置. String path="XXX ...

  3. 五毛的cocos2d-x学习笔记01-创建项目

    终于准备开始学习cocos2d-x了.因为想和同学一起做游戏参加比赛,所以打算学习很热的Cocos2d-x.因为已经学习了C++,所以我想入门应该不是很困难.再加上官网有中文教程以及多不胜数的游戏开发 ...

  4. BaseAdapter导致notifyDataSetChanged()无效的四个原因及处理方法

    前一段时间在做一个项目的时候遇到了一个关于BaseAdapter的notifyDataSetChanged()方法无效问题,当时在网上搜了一个解决方法,今天又遇到了一个类似的问题,我在这里做个记录,防 ...

  5. javascript 关闭页面提示

    window.onbeforeunload = function (e) { e = e || window.event; // For IE and Firefox prior to version ...

  6. 转: c++继承中的内存布局

    英文原文: http://www.openrce.org/articles/files/jangrayhood.pdf 翻译: http://blog.csdn.net/jiangyi711/arti ...

  7. perl学习(4) 子程序

    子程序,类比c语言中的函数,在形式上个人认为最大的区别:没有形参 1.1.定义子程序 1.2.调用 #! /usr/bin/perl sub marine { $n += 1 ; print &quo ...

  8. BZOJ 1607: [Usaco2008 Dec]Patting Heads 轻拍牛头

    1607: [Usaco2008 Dec]Patting Heads 轻拍牛头 Description   今天是贝茜的生日,为了庆祝自己的生日,贝茜邀你来玩一个游戏.     贝茜让N(1≤N≤10 ...

  9. 九、cocos2dx之Actions

    本文由qinning199原创,转载请注明:http://www.cocos2dx.net/?p=86 Action是CCNode对象的一种顺序.这些动作经常改变对象的一些属性,比如位置,旋转,缩放等 ...

  10. 微软阵营稳定的好消息:.NET开源、Visual Studio 自由

    今天各个IT社区,头版头条说的是微软.NET开源了.宇宙中最好的IED–Visual Studio Community 2013将免费提供给用户的消息. <宇宙中最强大的开发环境免费了! > ...