转换二进制数(这是一道竞赛形式的题目)。

1. 题目介绍


转换二进制数(这是一道竞赛形式的题目)。

时限:3s输人文件: change.in

  一串串太多太长的二进制数真是枯燥乏味,难怪小明看着看着就看花眼了;小亮看着看着就睡着了;小晶看着看着就恐慌起来了,仿佛自己变成了机器人,原本丰富多彩的世界一下子成了0和1的汪洋大海。他们一致要求将这些二进制数转换成十进制数,只有这样,心里才安稳,才痛快,睡觉才合得上眼.
  这项工作自然就落到你的手里了,因为早就听说你是处理二进制数的高手了,一点也不怀疑你会一下子想出十七八种转换的方法,而且其中还有几种方法还很经典呢,这儿真
的就是你用武的好地方,请下手吧。
  输入说明
  有3000个二进制数,最长的不过64位,在文件中以数字串的形式存放,每行只放1个数。如果是-1,那就表示输入结束
  输出说明
  每一个二进制数对应一个十进制数输出。每个输出都要换行。
  样板输入
  010000111110111110110110011001011111110011111100000001
  00000000000000001111111110101010010101010010100000001111100
  100001
  样板输出
  184924582623264513
  8784594944124
  33

2. 代码


 1 #include <iostream>
 2 #include <fstream>
 3 #include <sstream>
 4 
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     fstream fin("abc.txt");   //打开文件流
10     for(string s;getline(fin,s);){   //每次读取一行到字符串s
11         __int64 ans =0;
12         if(s =="-1"){    //判断是不是结尾
13             break;
14         }
15         for(int i=0;i<s.length();i++){
16             ans =(ans<<1)+s[i]-'0';  //从最高位开始是每次左移1位,相当于乘以2
17         }
18         cout<<ans<<endl;
19     }
20 }
原文地址:https://www.cnblogs.com/Triomphe/p/9385347.html