把一个二进制数转化为十进制数。
输入格式第一行一个正整数 n (1≤n≤30),表示二进制数的长度。
第二行一个二进制数。
输出格式输出一个整数,表示对应的十进制数。
Sample Input5 10101Sample Output
21本题的难点
1、用n表示二进制数的长度。
2、将二进制数转化为十进制。
下面就来一一解决吧。
本题首要是要解决二进制转化为十进制的问题。
请允许我借鉴一下百度好吧。
要想知道如何从二进制转化为十进制,我们就要先知道怎么从十进制转化为二进制
先了解熟悉的十进制转二进制
要用这种方法首先得会十进制转二级制的除以2取余的方法。
十进制转二进制
将余数和最后的1从下向上倒序写 就是结果
例如302
302÷2 = 151 余0
151÷2 = 75 余1
75÷2 = 37 余1
37÷2 = 18 余1
18÷2 = 9 余0
9÷2 = 4 余1
4÷2 = 2 余0
2÷2 = 1 余0
1÷2=0 余1
故二进制为100101110
那么现在只要逆推过程,二进制转十进制岂不是易如反掌?????
例如 100101110
1…………0×2+1=1…………余数为1
0…………1×2+0=2………… 余数为0
0 …………2×2+0=4 ………… 余数为0
1 …………4x2+1=9……………… 余数为1
0…………9x2+0=18 ……………… 余数为0
1 …………18×2+1=37 …………余数为1
1…………… 37×2+1=75…………余数为1
1………………75×2+1=151………… 余数为1
0………………151×2+0=302 ………… 余0
所以得到十进制数302
sum*=2; sum+=getchar()-'0';
利用循环进行以上操作即可。
(getchar()输入的是字符,-‘0’操作是把字符转化为数字了。)
再就是用n控制长度了。
while(n--)
{
sum*=2;
sum+=getchar()-'0';
}
想必看到就不需要多说了。
所以总代码就是这样了:
#includeint main(void) { int n; scanf("%d",&n); int sum=0; getchar(); while(n--) { sum*=2; sum+=getchar()-'0'; } printf("%dn",sum); return 0; }



