superman

聚精会神搞建设 一心一意谋发展
posts - 190, comments - 17, trackbacks - 0, articles - 0
   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

ZOJ 1098 - Simple Computers

Posted on 2008-04-03 13:41 superman 阅读(263) 评论(0)  编辑 收藏 引用 所属分类: ZOJ
Implement #1:
 1 /* Accepted 1098 C++ 00:00.01 844K */
 2 #include <stack>
 3 #include <string>
 4 #include <iostream>
 5 
 6 using namespace std;
 7 
 8 int main()
 9 {
10     string mem[32];
11     
12     while(cin >> mem[0])
13     {
14         int accu, pc;
15         
16         for(int i = 1; i < 32; i++)
17             cin >> mem[i];
18         
19         accu = 0; pc = 0;
20         while(true)
21         {
22             int x = 0, m[] = {168421};
23             
24             string ins = mem[pc].substr(03);
25             string num = mem[pc].substr(38);
26             for(int i = 0; i < num.size(); i++)
27                 x += (num[i] - '0'* m[i];
28             
29             pc = (++pc) % 32;
30             
31             if(ins == "000")
32             {
33                 stack <char> st;
34                 int n = accu;
35                 while(n)
36                 {
37                     st.push(n % 2 + '0');
38                     n /= 2;
39                 }
40                 while(st.size() < 8)
41                     st.push('0');
42                 for(int i = 0; i < 8; i++)
43                 {
44                     mem[x][i] = st.top();
45                     st.pop();
46                 }
47             }
48             if(ins == "001")
49             {
50                 accu = 0;
51                 int m[] = {1286432168421};
52                 for(int i = 0; i < 8; i++)
53                     accu += (mem[x][i] - '0'* m[i];
54             }
55             if(ins == "010")
56                 if(accu == 0)
57                     pc = x;
58             if(ins == "100")
59             {
60                 accu--;
61                 if(accu < 0)
62                     accu = 255;
63             }
64             if(ins == "101")
65                 accu = (++accu) % 256;
66             if(ins == "110")
67                 pc = x;
68             if(ins == "111")
69                 break;
70         }
71         
72         stack <int> st;
73         while(accu)
74         {
75             st.push(accu % 2);
76             accu /= 2;
77         }
78         while(st.size() < 8)
79             st.push(0);
80         for(int i = 0; i < 8; i++)
81         {
82             cout << st.top();
83             st.pop();
84         }
85         cout << endl;
86     }
87     
88     return 0;
89 }
90 

Implement #2:
 1 /* Accepted 1098 C++ 00:00.01 836K */
 2 #include <string>
 3 #include <iostream>
 4 
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     string s;
10     while(cin >> s)
11     {
12         int mem[32= {0}, m[] = {1286432168421};
13         
14         for(int i = 0; i < 8; i++)
15             mem[0+= (s[i] - '0'* m[i];
16         for(int i = 1; i < 32; i++)
17         {
18             cin >> s;
19             for(int j = 0; j < 8; j++)
20                 mem[i] += (s[j] - '0'* m[j];
21         }
22         
23         int accu = 0, pc = 0;
24         bool over = false;
25         while(over == false)
26         {
27             pc %= 32;
28             
29             int x = mem[pc] & 31;   // (31)10  = (00011111)2
30             switch(mem[pc] & 224)   // (224)10 = (11100000)2
31             {
32                 case  0  : mem[x] = accu; pc++;   break;
33                 case 32  : accu = mem[x]; pc++;   break;
34                 case 64  : if(accu == 0)
35                                pc = x;
36                             else
37                                 pc++;             break;
38                 case 96  : pc++;                  break;
39                 case 128 : accu--;
40                            if(accu < 0)
41                                accu = 255;
42                            pc++;                  break;
43                 case 160 : accu = (++accu) % 256;
44                            pc++;                  break;
45                 case 192 : pc = x;                break;
46                 case 224 : over = true;           break;
47             }
48         }
49         for(int i = 7; i >= 0; i--)
50             cout << ((accu >> i) & 1);
51         cout << endl;
52     }
53     
54     return 0;
55 }
56 

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理