当前位置: 代码迷 >> C语言 >> Skew数
  详细解决方案

Skew数

热度:305   发布时间:2007-10-11 21:05:22.0
Skew数

Skew数

Time Limit:1000MS Memory Limit:32767K
Total Submit:13 Accepted:5

Description

在 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, and 102。


Input

输入包含一行或多行,每行包含一个整数n。 如果 n = 0 表示输入结束,否则n是一个skew 数

Output

对于每一个输入,输出它的十进制表示。转换成十进制后, n 不超过 2^31-1 = 2147483647

Sample Input


10120
200000000000000000000000000000
10
1000000000000000000000000000000
11
100
11111000001110000101101102000
0

Sample Output


44
2147483646
3
2147483647
4
7
1041110737

搜索更多相关的解决方案: Skew  

----------------解决方案--------------------------------------------------------

简单.
这个是哪里的OJ?


----------------解决方案--------------------------------------------------------
回复:(nuciewth)简单.[em01]这个是哪里的OJ?
[UserName=nuciewth][/UserName]
#include<stdio.h>
#include<string.h>
int data[33]={0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535,
131071,262143,524287,1048575,2097151,4194303,8388607,16777215,
33554431,67108863,134217727,268435455,536870911,1073741823,2147483647};
int main()
{
char str[32];

while(EOF!=(scanf("%s",str))&&strcmp(str,"0")!=0)
{
long sum=0;
int len=strlen(str);
for(int i=0;i<len;i++)
{
sum+=(str[i]-'0')*data[len-i];
}
printf("%ld\n",sum);
}
return 0;
}
----------------解决方案--------------------------------------------------------
for(int i=0;i<len;i++)
{
sum+=(str[i]-'0')*data[len-i];
}
printf("%ld\n",sum);

3楼的代码能通过编译吗

[此贴子已经被作者于2007-10-11 21:53:49编辑过]


----------------解决方案--------------------------------------------------------

为什么通不过.
怎么你可以看到,我只给我自己看的
----------------解决方案--------------------------------------------------------
以下是引用nuciewth在2007-10-11 22:11:06的发言:

为什么通不过.
怎么你可以看到,我只给我自己看的

c语言不能在for里声明变量的
我也不知道咋就看到了- -!


----------------解决方案--------------------------------------------------------
只要编译器通过,我就认为可以.
我比较相信编译器.
----------------解决方案--------------------------------------------------------
以下是引用nuciewth在2007-10-11 22:18:04的发言:
只要编译器通过,我就认为可以.
我比较相信编译器.

你用的vc吧?
你既然都知道这是个oj题
应该知道用gcc的话是不可能通过编译的
vc能编译是有原因的


----------------解决方案--------------------------------------------------------
睡觉了
明天还得上班
最后再补充一下
你可以在你的源文件开头加上
#ifdef __cplusplus
extern "C" {
#endif
在源文件结尾加上
#ifdef __cplusplus
}
#endif
再用vc编一次试试能不能成功
我说有原因就是vc是一个c++编译器,所以你的那个能通过编译是因为vc按照c++的语法规则解释的,即使你的源文件名后缀是.c而不是.cpp
而加上我刚才说的那个条件编译命令后
vc会严格按照c的语法来进行编译
----------------解决方案--------------------------------------------------------
我可以说应该可以编译通过.
----------------解决方案--------------------------------------------------------