ZHANGZHANG喜欢手表
Time Limit: 2000/1000ms (Java/Others)
Problem Description:
ZHANGZHANG刚过生日,收到了好朋友NENGNENG挖宝藏挖到的一个手表,可喜欢了。
ZHANGZHANG发现,这个手表跟电脑主机后面的时钟有着极大的相似性,于是ZHANGZHANG决定对它进行深入研究。
通过收集资料ZHANGZHANG发现,这里每个数字的显示是由8个LED灯来决定的,LED灯的亮与暗决定了最终显示的数字。因为一个数字有显示一共有8个LED灯,分别给它们标上abcdefgh,就得到下面这图。
聪明的ZHANGZHANG一下子就想到了可以用一个8位的二进制来表示一个数字,如数字0,那么就可以把abcdef灯置为1,其他置为0,于是得到一个数字 00111111 (即hgfedcba)。其他数字如下图
那么,手表上有四个数字,肯定就可以用一个32位的二进制整数来表示,那么给你一个时间,输出对应的整数。
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 }