package di8jie;
import java.util.Scanner;
public class xiaojisuanqi4 {
/*
*
* 标题:小计算器
*
* 模拟程序型计算器,依次输入指令,可能包含的指令有
*
* 1. 数字:'NUM X',X为一个只包含大写字母和数字的字符串,表示一个当前进制的数 2.
* 运算指令:'ADD','SUB','MUL','DIV','MOD',分别表示加减乘,除法取商,除法取余 3. 进制转换指令:'CHANGE
* K',将当前进制转换为K进制(2≤K≤36) 4. 输出指令:'EQUAL',以当前进制输出结果 5. 重置指令:'CLEAR',清除当前数字
*
* 指令按照以下规则给出: 数字,运算指令不会连续给出,进制转换指令,输出指令,重置指令有可能连续给出
* 运算指令后出现的第一个数字,表示参与运算的数字。且在该运算指令和该数字中间不会出现运算指令和输出指令
* 重置指令后出现的第一个数字,表示基础值。且在重置指令和第一个数字中间不会出现运算指令和输出指令 进制转换指令可能出现在任何地方
*
* 运算过程中中间变量均为非负整数,且小于2^63。 以大写的'A'~'Z'表示10~35
*
* [输入格式] 第1行:1个n,表示指令数量 第2..n+1行:每行给出一条指令。指令序列一定以'CLEAR'作为开始,并且满足指令规则
*
* [输出格式] 依次给出每一次'EQUAL'得到的结果
*
* [样例输入] 7 CLEAR NUM 1024 CHANGE 2 ADD NUM 100000 CHANGE 8 EQUAL
*
* [样例输出] 2040
*
* 补充说明: 1. n 值范围: 1<= n < 50000 2. 初始默认的进制是十进制
*
*
*
* 资源约定: 峰值内存消耗 < 256M CPU消耗 < 1000ms
*
*
* 请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
*
* 所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。 注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
* 注意:主类的名字必须是:Main,否则按无效代码处理。
*
*/
static long basis = 0;
static int jinzhi = 10;
static int yunsuan = 0;// ADD SUB MUL DIV MOD
// 1 2 3 4 5
// 加 减 乘 除法取商 除法取余
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
sc.nextLine();
while (n > 0) {
String str = sc.nextLine();
if (str.equals("CLEAR")) {
basis = 0;
// jinzhi = 10;
// yunsuan = 0;
n--;
continue;
}
if (str.equals("ADD")) {
yunsuan = 1;
n--;
continue;
}
if (str.equals("SUB")) {
yunsuan = 2;
n--;
continue;
}
if (str.equals("MUL")) {
yunsuan = 3;
n--;
continue;
}
if (str.equals("DIV")) {
yunsuan = 4;
n--;
continue;
}
if (str.equals("MOD")) {
yunsuan = 5;
n--;
continue;
}
if (str.equals("EQUAL")) {
System.out.println(re(basis,jinzhi));
n--;
continue;
}
if (str.split(" ")[0].equals("NUM")) {
String x_in = str.split(" ")[1];
long x = re(x_in, jinzhi);
switch (yunsuan) {
case 0:
basis = x;
break;
case 1:
basis += x;
break;
case 2:
basis -= x;
break;
case 3:
basis = basis * x;
break;
case 4:
basis = basis / x;
break;
case 5:
basis = basis % x;
break;
default:
System.out.println("wrong");
break;
}
n--;
continue;
}
jinzhi = Integer.parseInt(str.split(" ")[1]);
n--;
}
}
public static long re(String v, int jinzhi) {
char [] s =v.toCharArray();
long aws = 0;
for(int i=0;i<s.length;i++){
if(s[s.length-i-1]-'A'>=0){
int t = s[s.length-i-1]-'A'+10;
aws = aws +((long)t) * (long)Math.pow(jinzhi, i);
}else{
int t = s[s.length-i-1]-'0';
aws = aws +((long)t) * (long)Math.pow(jinzhi, i);
}
}
return aws;
}
public static String re(long v,int jinzhi){
if(v==0)return "";
return re(v/jinzhi,jinzhi)+((v%jinzhi)>9?z[(int)((v%jinzhi)-10)]:v%jinzhi);
}
static String [] z ={"A","B","C","D","E","F","G","H","I","J","K","L",
"M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
}