ZHANGZHANG喜欢手表
Time Limit: 2000/1000ms (Java/Others)
Problem Description:
ZHANGZHANG刚过生日,收到了好朋友NENGNENG挖宝藏挖到的一个手表,可喜欢了。
![](http://222.202.171.23/goj/Tpl/Public/Uploads/1512788398_1854442708.jpg)
ZHANGZHANG发现,这个手表跟电脑主机后面的时钟有着极大的相似性,于是ZHANGZHANG决定对它进行深入研究。
![](http://222.202.171.23/goj/Tpl/Public/Uploads/1512788286_1921675882.jpg)
通过收集资料ZHANGZHANG发现,这里每个数字的显示是由8个LED灯来决定的,LED灯的亮与暗决定了最终显示的数字。因为一个数字有显示一共有8个LED灯,分别给它们标上abcdefgh,就得到下面这图。
![](http://222.202.171.23/goj/Tpl/Public/Uploads/1512788880_1172653969.jpg)
聪明的ZHANGZHANG一下子就想到了可以用一个8位的二进制来表示一个数字,如数字0,那么就可以把abcdef灯置为1,其他置为0,于是得到一个数字 00111111 (即hgfedcba)。其他数字如下图
![](http://222.202.171.23/goj/Tpl/Public/Uploads/1512789957_1840533868.jpg)
那么,手表上有四个数字,肯定就可以用一个32位的二进制整数来表示,那么给你一个时间,输出对应的整数。
Input:
输入有多组数据数据,每组数据一行,输入一个时间,格式为HH:mm。
Output:
对于每组数据,输出一个32位整数(输出十进制)。
Sample Input:
00:00 01:23 23:59
Sample Output:
1061109567 1057381199 1531932015 Hints: 样例2中,对应的32位二进制为 00111111000001100101101101001111,它的十进制是1057381199。
解题思路:注意:0~9这10个数字中h灯的状态始终为0。做法:将数字对应的字符串(显示状态)相加,再从右往左求32位二进制的10进制即可,水过。
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main(){ 4 string hour,obj,str[]={"00111111","00000110","01011011","01001111", 5 "01100110","01101101","01111101","00000111","01111111","01101111"}; 6 int ans,base; 7 while(cin>>hour){ 8 obj=str[hour[0]-'0']+str[hour[1]-'0']+str[hour[3]-'0']+str[hour[4]-'0']; 9 ans=0;base=1; 10 for(int i=31;i>=0;--i){ 11 if(obj[i]=='1')ans+=base; 12 base*=2; 13 } 14 cout<<ans<<endl; 15 } 16 return 0; 17 }