二进制整数转十进制 - 位运算的应用

时间:2021-03-10 03:38:26

校OJ的水题,但是可以创新一下用位运算来计算

但是要注意 C语言中的数字常数默认类型为int 位移过程中可能出现溢出

 

 

Description

给出一个二进制的非负整数x,x<232,把它转换成十进制数输出。

 

 

Input   输入为多行,每行一个二进制非负整数x。

Output  每行输出x对应的十进制数值。 

Sample Input

0 1 01 10 11 100001 1111111111111111

Sample Output

0 1 1 2 3 33 65535

HINT

 注意数据范围!!!

 

 

 1 #include "stdio.h"  2 #include "string.h"  3 const int maxn = 100000;  4 int main(int argc, char const *argv[])  5 {  6 char indata[maxn];  7 memset(indata,0,sizeof(indata));  8 while(scanf("%s",indata)!=EOF)  9  { 10 int n = strlen(indata); 11 unsigned long long sum = 0; 12 for(int i=n-1;i>=0;i--) 13  { 14 unsigned long long k = indata[i]-'0'; 15 sum += (k<<(n-i-1)); 16  } 17 printf("%llu\n",sum ); 18  } 19 return 0; 20 }