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 }