蓝桥杯 二进制串转整数 小技巧
2015-03-31 17:40
141 查看
参考答案: n * 2 + (p[i] - '0')
注意: 加法减法的顺序可以灵活, 乘法可以交换,也可以 n + n ;
p[i] 可以写为 *(p+i)
'0' 可以写为 48
可能有许多写法,代入到源程序,看运行结果。
乍一看很简单的一道题,但是悲催的我以前都是用pow求的,这下突然不能用了,还有点不适应,其实,只要类比一下十进制就行了,比如十进制的123,我们首先提取第一个1,然后乘10,再提取出2,加上后再乘10变成120,最后提取出3,加上就可以了,也就是说如果要从后往前算,那么需要用pow,但是从前往后算就只需要乘以进制就可以了。
#include<iostream>
#include<cstring>
#include<stdio.h>
#include<cmath>
using namespace std;
int main()
{
char* p = "1010110001100";
int n = 0;
for(int i=0;i<strlen(p); i++)
{
n =n*2+(int)(p[i]-'0');
}
printf("%d\n", n);
return 0;
}
注意: 加法减法的顺序可以灵活, 乘法可以交换,也可以 n + n ;
p[i] 可以写为 *(p+i)
'0' 可以写为 48
可能有许多写法,代入到源程序,看运行结果。
乍一看很简单的一道题,但是悲催的我以前都是用pow求的,这下突然不能用了,还有点不适应,其实,只要类比一下十进制就行了,比如十进制的123,我们首先提取第一个1,然后乘10,再提取出2,加上后再乘10变成120,最后提取出3,加上就可以了,也就是说如果要从后往前算,那么需要用pow,但是从前往后算就只需要乘以进制就可以了。
#include<iostream>
#include<cstring>
#include<stdio.h>
#include<cmath>
using namespace std;
int main()
{
char* p = "1010110001100";
int n = 0;
for(int i=0;i<strlen(p); i++)
{
n =n*2+(int)(p[i]-'0');
}
printf("%d\n", n);
return 0;
}
相关文章推荐
- 小技巧,计算一个十进制整数在二进制下“1”的个数
- 每天一道算法题16 整数的二进制表示中1的个数
- 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
- 快速计算整数的二进制表示法中1的个数
- 蓝桥杯-出现次数最多的整数(java)
- 将整数以二进制的形式输出来
- 整数二进制表示中1的个数
- 统计整数的二进制表达里有多少个1 Python版
- 蓝桥杯 C++ 5位正整数倒叙输出
- 将整数转为二进制
- 将整数转化为二进制字符串
- 对于二进制的字符串进行二进制整数转换,并进行二进制输出,前面补0
- 第9题 求整数的二进制表达式中1的个数
- 二进制整数的倒序
- 蓝桥杯——趣味整数问题二(2017.1.31)
- 28、整数的二进制表示中1的个数
- 读取一个整数值转化为二进制
- 在计算机中,输出一个整数二进制中1的个数.
- 蓝桥杯 16进制转化八进制+使用二进制
- 算法-蓝桥杯-算法提高 三个整数的排序(JAVA)