题目描述:
当一个数是十进制数,每项的基数表现为10的k次方(数字是有限的,从左边到右边,最末的数字是10的0次方)。举例来说:
81307(10)=8×104+1×103+3×102+0×101+7×100
= 80000+1000+300+0+7
= 81307
当一个数是二进制数,每项的基数表现为2的k次方。举例来说:
10011(2)= 1×24+0×23+0×22+1×21+1×20
= 16+0+0+2+1.
= 19
在斜二进制中,我们定义shu为斜二进制数,每项的基数表现2的(k+1)次方减1。举例来说:
l0120(shu)=1×(25-1)+0×(24-1)+1×(23-1)+2×(22-1)+0×(21―1)
= 31+0+7+6+0
= 44
例如:最初10个数字在斜二进制中是0,1,2,10,11,12,20,100,101,102。
输入格式:
输入文件包括1行数据,一个斜二进制整数。
输出格式:
输出斜二进制数字的十进制值,要是超过2147483647,则输出"too long!"。
样例输入:
11
样例输出:
4
提示:
读入的数的长度<=100,用单个long long 变量是存储不了的。
建议用字符读入,存入字符数组中。
时间限制: 1000ms
空间限制: 64MB
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
char n[1001];
cin>>n;
long long s=strlen(n),s1=0,a;
long long b=s;
for(long long i=0;i<s;i++){
a=n[i]-'0';
s1=s1+a*(pow(2,b)-1);
b--;
}
if(s1>2147483647){
cout<<"too long!";
}else{
cout<<s1;
}
return 0;
}