时间限制:1 秒内存限制:128 MB

主题描述

将二进制数转换为对应的十进制数。

进入

输入一个二进制数并以回车结束。 二进制数为正数,长度不超过 31。

输出

输出一个整数,也就是二进制数对应的十进制数。

样本输入复制

100000000001

示例输出副本

2049

暗示

(1)整数运算尽量避免pow等double类型的函数,避免截断和舍入造成的错误。

(2)可以采用递归思想,充分利用中间结果。 类似思路可以参考秦九少算法。 秦九韶算法是我国南宋数学家秦九韶提出的一种多项式化简算法。 计算多项式 f(x) = a0*xn + a1*x(n-1) + … + an 只需要 n 次乘法和 n 次加法。 原理是一次多项式f(x)可以写成: f(x) =(((a0*x + a1)*x + a2) *x+ … an-1) * x +一个。 要从里到外计算括号,只需要n次乘法和n次加法。

本题从高到低依次输出二进制数,对应多项式系数a0、a1、……、an,x的值为2。递归过程如下:

d = 0;

while( ch = getchar(), ch != ‘\n’)

d = d * 2 + (ch – ‘0’);

#include int main(){     char ch;     int d;     d=0;     while(ch=getchar(),ch!='\n')     {        d=d*2+(ch-'0');      }       printf("%d",d);     return 0;}