題目:已知一個字符串的運算規則,每次有四種操,輸入兩個串和三個運算,求左後的結果和給定結果是否相同。
分析:觀察發現是四進制運算,加法、左移位、右移位;
因為和二進制相同直接按二進制計算即可;這裡移位的時候每次移動兩位即可。
說明:╮(╯▽╰)╭,上個月沒怎麼做題。
#include <cstdlib>
#include <cstring>
#include <cstdio>
char number1[22];
char number2[22];
char number3[22];
char operators[3];
int char2int(char str[])
{
int ans = 0;
for (int i = 0; str[i]; ++ i) {
switch (str[i]) {
case 'V': ans = ans*4 + 0; break;
case 'U': ans = ans*4 + 1; break;
case 'C': ans = ans*4 + 2; break;
case 'D': ans = ans*4 + 3; break;
default : break;
}
}
return ans;
}
int main()
{
int T, value1, value2;
while (~scanf("%d",&T)) {
puts("COWCULATIONS OUTPUT");
while (T --) {
scanf("%s%s",number1,number2);
value1 = char2int(number1);
value2 = char2int(number2);
for (int i = 0; i < 3; ++ i) {
scanf("%s",operators);
switch(operators[0]) {
case 'A': value2 = value2 + value1; break;
case 'R': value2 = value2>>2; break;
case 'L': value2 = value2<<2; break;
default : break;
}
}
scanf("%s",number3);
if (value2 == char2int(number3)) {
puts("YES");
}else {
puts("NO");
}
}
puts("END OF OUTPUT");
}
return 0;
}