权重法
其实就是对应位乘以对应位的权值,从低位数第i位的权值为2i-1,比如1001=1*20+0*21+0*22+1*23=9。
代码如下:
#include <iostream>
#include <cstring>
using namespace std;
int main(){
string s;
cin>>s;
long long l=0,base=1;
for(int i=s.size()-1;i>=0;i--){
l+=base*(s[i]-'0');
base*=2;
}
cout<<l;
return 0;
}
位运算法
不断重复移位过程,比如字符串bin=1001,求他的十进制数oct为,步骤如下:
- 初始化oct=0,定义i为bin的末位索引编号,由于bin长度为4,所以这里i=3
- oct左移1位,即oct<<=1,
- oct+=bin[i]
- i=i-1,如果i>=0,重复第2步,否则输出oct
代码如下:
#include <iostream>
#include <cstring>
using namespace std;
int main(){
string s;
cin>>s;
long long l=0;
for(int i=s.size()-1;i>=0;i--){
l<<=1;
l+=s[i]-'0';
}
cout<<l;
return 0;
}
样例输入
1001
样例输出
9