1 #include <iostream>
2 #include <string.h>
3 using namespace std;
4
5 int main()
6 {
7 char RegKey[200]; // 320816081632163208
8 int tip[21] = {80, 108, 101, 97, 115, 101, 0, 105, 110, 112, 117, 116, 0,
9 82, 101, 103, 75, 101, 121, 58, 0};
10 // Please input RegKey:
11 int ok[32] = {86, 101, 114, 121, 0, 103, 111, 111, 100, 33, 0, 89, 111, 117, 114, 0,
12 82, 101, 103, 75, 101, 121, 0, 105, 115, 0, 82, 105, 103, 104, 116, 33};
13 // Very good! Your RegKey is Right!
14 int no[28] = {83, 111, 114, 114, 121, 33, 0, 89, 111, 117, 114, 0,
15 82, 101, 103, 75, 101, 121, 0, 105, 115, 0, 87, 114, 111, 110, 103, 33};
16 // Sorry! Your RegKey is Wrong!
17 int TestLen[25] = {82, 101, 103, 75, 101, 121, 0, 108, 101, 110, 103, 116, 104, 0,
18 109, 117, 115, 116, 0, 98, 101, 0, 49, 56, 46};
19 // RegKey length must be 18.
20
21 for(int i = 0; i < 21; i++)
22 cout << (char)tip[i];
23 cin >> RegKey;
24
25 int key1 = 32, key2, key3, key4, key5 = 16, key6, key7, key8, key9;
26
27 // 判断输入位数是否为 18 若不等于 18 输出提示
28 if(strlen(RegKey) != 18)
29 {
30 for(int i = 0; i < 25; i++)
31 cout << (char)TestLen[i];
32 cout << endl;
33 }
34 else
35 {
36 /*
37 ━━━━━━━━━━━━━━━━
38 ┃ 32 ┃ xx ┃ xx ┃
39 ━━━━━━━━━━━━━━━━
40 ┃ xx ┃ 16 ┃ xx ┃
41 ━━━━━━━━━━━━━━━━
42 ┃ xx ┃ xx ┃ xx ┃
43 ━━━━━━━━━━━━━━━━
44 */
45 // 判断左上角是否为 32 且中心是否为 16
46 if((RegKey[0] - '0') * 10 + (RegKey[1] - '0') == key1
47 && (RegKey[8] - '0') * 10 + (RegKey[9] - '0') == key5)
48 {
49 key2 = (RegKey[2] - '0') * 10 + (RegKey[3] - '0');
50 key3 = (RegKey[4] - '0') * 10 + (RegKey[5] - '0');
51 key4 = (RegKey[6] - '0') * 10 + (RegKey[7] - '0');
52 key6 = (RegKey[10] - '0') * 10 + (RegKey[11] - '0');
53 key7 = (RegKey[12] - '0') * 10 + (RegKey[13] - '0');
54 key8 = (RegKey[14] - '0') * 10 + (RegKey[15] - '0');
55 key9 = (RegKey[16] - '0') * 10 + (RegKey[17] - '0');
56
57 // 这里判断一下右下角是否为 0 因为右下角为 0 则除了已给出的 32 和 16
58 // 其他部位全部填 0 则可正确注册
59 if(key9 != 0)
60 {
61 // 判断横排三组数相乘是否相等
62 if(key1 * key2 * key3 == key4 * key5 * key6
63 && key4 * key5 * key6 == key7 * key8 * key9)
64 {
65 // 判断竖排三组数相乘是否相等
66 if(key1 * key4 * key7 == key2 * key5 * key8
67 && key2 * key5 * key8 == key3 * key6 * key9)
68 {
69 // 判断对角两组数相乘是否相等
70 if(key1 * key5 * key9 == key3 * key5 * key7)
71 {
72 for(int i = 0; i < 32; i++)
73 cout << (char)ok[i];
74 cout << endl;
75 }
76 else
77 {
78 for(int i = 0; i < 28; i++)
79 cout << (char)no[i];
80 cout << endl;
81 }
82 }
83 else
84 {
85 for(int i = 0; i < 28; i++)
86 cout << (char)no[i];
87 cout << endl;
88 }
89 }
90 else
91 {
92 for(int i = 0; i < 28; i++)
93 cout << (char)no[i];
94 cout << endl;
95 }
96 }
97 else
98 {
99 for(int i = 0; i < 28; i++)
100 cout << (char)no[i];
101 cout << endl;
102 }
103 }
104 else
105 {
106 for(int i = 0; i < 28; i++)
107 cout << (char)no[i];
108 cout << endl;
109 }
110 }
111 return 0;
112 }