ACM_ZHANGZHANG喜欢手表

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位的二进制整数来表示,那么给你一个时间,输出对应的整数。

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 }

猜你喜欢

转载自www.cnblogs.com/acgoto/p/9240341.html