很简单的一题,就是一个特殊2进制的转换为10进制的题,在算每个位置对应的值是,应该先算2^x,然后再减去1,所以此处会超出int型的范围,所以注意用long long型。
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
char dig[100];
long long arr[35];
int num[35];
void ini()
{
arr[1] = 2;
for(int i=2;i<=34;++i)
arr[i] = arr[i-1]*2;
for(int i=1;i<=34;++i)
arr[i] -= 1;
}
int main(void)
{
ini();
while(scanf("%s",dig+1)!=EOF)
{
int len = strlen(dig+1);
if(len==1&&dig[1]=='0')
break;
for(int i=1;i<=len/2;++i)
{
char tmp = dig[i];
dig[i] = dig[len-i+1];
dig[len-i+1] = tmp;
}
for(int i=1;i<=len;++i)
num[i] = dig[i] - '0';
long long ans = 0;
for(int i=1;i<=len;++i)
{
ans += (arr[i]*num[i]);
}
cout<<ans<<endl;
}
return 0;
}