问题描述:
Skew数表示第k位的值xk表示xk*(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)=44.
输入数据:
输入包含一行或多行,每行包含一个数n。如果n=0表示输入结束,否者n是一个skew数
输出要求:
对于每一个输入,输出它的十进制表示。转换成十进制,n不超过2^31-1;
/*
项目:skew 数
作者: ivy
日期: 2014-11-5
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char ch[32];
int i,j;
memset(ch,0,sizeof(ch));
scanf("%s",ch);
while(ch[0]!='0')
{
int len=strlen(ch);
int sum=0;
for(i=0;i<len;i++)
{
int subval=1;
for(j=0;j<=len-1-i;j++)
{
subval*=2;
}
sum+=(ch[i]-'0')*(subval-1);
}
printf("%d\n",sum);
memset(ch,0,sizeof(ch));
scanf("%s",ch);
}
system("pause");
return 0;
}