挑战编程 程序设计竞赛训练手册-1.6.6 解释器(Interpreter)
来源:互联网 发布:淘宝二手官方下载 编辑:程序博客网 时间:2024/05/22 14:11
挑战编程 程序设计竞赛训练手册-1.6.6 解释器(Interpreter)
public class problem_Interpreter {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stub/*int testYu = 9%1000;System.out.println(testYu);*/String[] s = {"299",//"211",//测试9"492","495","399","492",//"981",//测试9"495","399","283","279","689","078","100"/*,"000","000","000"*/};int step = 1;//步骤起始数位1int[] registerD = new int[10];//声明寄存器int[] memoryVal = new int[1000];//声明内存单元值int RegisterDx=0;//声明寄存器下标,初始化为0int testRegisterDx;//声明临时寄存器下标int tempRegisterD;//声明暂存寄存器int tempMemoryVal;//声明暂存内存单元值for(int i=0;i<s.length;i++){//开始读取数据i即为内存单元int interpreter =Integer.parseInt(s[i].substring(0, 1));//截取指令switch(interpreter){case 1://表示停机if(s[i].equals("100")){System.out.println("step"+step);}else{System.out.println("无效代码");}break;case 2://2dn将寄存器d的值设为n(0-9)testRegisterDx = Integer.parseInt(s[i].substring(1,2));//截取第二位数,为临时寄存器下标赋值if(errorRegisterDx(testRegisterDx)){//判断有效性System.out.println("无效代码");}else{//System.out.println(registerD);//System.out.println(s[i].substring(2, s[i].length()));RegisterDx = testRegisterDx;//临时下标有效,赋值给下标registerD[RegisterDx] =nToD(Integer.parseInt(s[i].substring(2, s[i].length())));//把n赋值给指定寄存器}break;case 3://3dn将寄存器d的值增加ntestRegisterDx = Integer.parseInt(s[i].substring(1,2));//截取第二位数,为临时寄存器下标赋值if(errorRegisterDx(testRegisterDx)){//判断有效性System.out.println("无效代码");}else{//System.out.println(registerD);//System.out.println(s[i].substring(2, s[i].length()));RegisterDx = testRegisterDx;//临时下标有效,赋值给下标registerD[RegisterDx] =dPlusN(registerD[RegisterDx],Integer.parseInt(s[i].substring(2, s[i].length())));//把n赋值给指定寄存器}break;case 4://4dn将寄存器的的值乘以ntestRegisterDx = Integer.parseInt(s[i].substring(1,2));//截取第二位数,为临时寄存器下标赋值if(errorRegisterDx(testRegisterDx)){//判断有效性System.out.println("无效代码");}else{//System.out.println(registerD);//System.out.println(s[i].substring(2, s[i].length()));RegisterDx = testRegisterDx;//临时下标有效,赋值给下标registerD[RegisterDx] =dTimesN(registerD[RegisterDx],Integer.parseInt(s[i].substring(2, s[i].length())));//把n赋值给指定寄存器}break;case 5://5ds将寄存器s的值拷贝到寄存器dtestRegisterDx = Integer.parseInt(s[i].substring(2,3));//截取赋值寄存器的下标if(errorRegisterDx(testRegisterDx)){//判断被赋值寄存器下标有效性System.out.println("无效代码");}else{RegisterDx = testRegisterDx;//临时下标有效,赋值给正式寄存器的下标tempRegisterD = registerD[RegisterDx];//--被赋值寄存器的值--存储在临时数据中testRegisterDx = Integer.parseInt(s[i].substring(1,2));//截取赋值寄存器下标if(errorRegisterDx(testRegisterDx)){//判断赋值寄存器下标有效性System.out.println("无效代码");}else{//System.out.println(registerD);//System.out.println(s[i].substring(2, s[i].length()));RegisterDx = testRegisterDx;//临时下标有效,赋值给下标registerD[RegisterDx] =RsToRd(registerD[RegisterDx],tempRegisterD);//等待被赋值寄存器,等待赋值寄存器}}break;case 6://6ds将寄存器s的值加到寄存器dtestRegisterDx = Integer.parseInt(s[i].substring(2,3));//截取赋值寄存器的下标if(errorRegisterDx(testRegisterDx)){//判断被赋值寄存器下标有效性System.out.println("无效代码");}else{RegisterDx = testRegisterDx;//临时下标有效,赋值给正式寄存器的下标tempRegisterD = registerD[RegisterDx];//--被赋值寄存器的值--存储在临时数据中testRegisterDx = Integer.parseInt(s[i].substring(1,2));//截取赋值寄存器下标if(errorRegisterDx(testRegisterDx)){//判断赋值寄存器下标有效性System.out.println("无效代码");}else{//System.out.println(registerD);//System.out.println(s[i].substring(2, s[i].length()));RegisterDx = testRegisterDx;//临时下标有效,赋值给下标registerD[RegisterDx] =RsPlusRd(registerD[RegisterDx],tempRegisterD);//等待被赋值寄存器,等待赋值寄存器}}break;case 7://7ds将寄存器s的值乘到寄存器dtestRegisterDx = Integer.parseInt(s[i].substring(2,3));//截取赋值寄存器的下标if(errorRegisterDx(testRegisterDx)){//判断被赋值寄存器下标有效性System.out.println("无效代码");}else{RegisterDx = testRegisterDx;//临时下标有效,赋值给正式寄存器的下标tempRegisterD = registerD[RegisterDx];//--被赋值寄存器的值--存储在临时数据中testRegisterDx = Integer.parseInt(s[i].substring(1,2));//截取赋值寄存器下标if(errorRegisterDx(testRegisterDx)){//判断赋值寄存器下标有效性System.out.println("无效代码");}else{//System.out.println(registerD);//System.out.println(s[i].substring(2, s[i].length()));RegisterDx = testRegisterDx;//临时下标有效,赋值给下标registerD[RegisterDx] =RsTimesRd(registerD[RegisterDx],tempRegisterD);//等待被赋值寄存器,等待赋值寄存器}}break;case 8://8da将地址为”寄存器a的值“的内存单元的值拷贝到寄存器dtestRegisterDx = Integer.parseInt(s[i].substring(1,2));//截取赋值寄存器的下标if(errorRegisterDx(testRegisterDx)){//判断被赋值寄存器下标有效性System.out.println("无效代码");}else{RegisterDx = testRegisterDx;//临时下标有效,赋值给正式寄存器的下标tempRegisterD = registerD[RegisterDx];//--赋值寄存器的值--存储在临时数据中tempMemoryVal = memoryVal[registerD[RegisterDx]];testRegisterDx = Integer.parseInt(s[i].substring(2,s[i].length()));//截取被赋值寄存器下标if(errorRegisterDx(testRegisterDx)){//判断赋值寄存器下标有效性System.out.println("无效代码");}else{RegisterDx = testRegisterDx;//临时下标有效,赋值给下标registerD[RegisterDx]=MaToRd(registerD[RegisterDx],tempMemoryVal);//把内存单元值赋给寄存器}}break;case 9://9sa将寄存器s的值拷贝到地址为"寄存器a的值"的内存单元testRegisterDx = Integer.parseInt(s[i].substring(1,2));//截取赋值寄存器的下标if(errorRegisterDx(testRegisterDx)){//判断被赋值寄存器下标有效性System.out.println("无效代码");}else{RegisterDx = testRegisterDx;//临时下标有效,赋值给正式寄存器的下标tempRegisterD = registerD[RegisterDx];//--赋值寄存器的值--存储在临时数据中testRegisterDx = Integer.parseInt(s[i].substring(2,s[i].length()));//截取被赋值寄存器下标if(errorRegisterDx(testRegisterDx)){//判断赋值寄存器下标有效性System.out.println("无效代码");}else{RegisterDx = testRegisterDx;//临时下标有效,赋值给下标memoryVal[registerD[RegisterDx]]=RsToMa(memoryVal[registerD[RegisterDx]],tempRegisterD);//为内存单元赋值System.out.println(memoryVal[registerD[RegisterDx]]);}}break;case 0://0ds若寄存器s的值不为0,则跳转到地址为"寄存器d的值"的内存单元处继续执行testRegisterDx = Integer.parseInt(s[i].substring(2,3));//截取第二位数,为临时寄存器下标赋值if(errorRegisterDx(testRegisterDx)){//判断有效性System.out.println("无效代码");}else{//System.out.println(registerD);//System.out.println(s[i].substring(2, s[i].length()));RegisterDx = testRegisterDx;//临时下标有效,赋值给下标if(registerD[RegisterDx]!=0){testRegisterDx = Integer.parseInt(s[i].substring(1,2));//截取第二位数,为临时寄存器下标赋值if(errorRegisterDx(testRegisterDx)){//判断有效性System.out.println("无效代码");}else{RegisterDx = testRegisterDx;//临时下标有效,赋值给下标i=registerD[RegisterDx]-1;//获取下标寄存器的值。减1为了抵消循环时的+1操作。//System.out.println(i+1);}}else{//System.out.println("ture");}}break;default:break;}memoryVal[i]=registerD[RegisterDx];//System.out.println("内存单元"+i+" 值为"+registerD[RegisterDx]);step++;//步骤+1}}private static int MaToRd(int i, int tempMemoryVal) {// TODO Auto-generated method stubreturn (i=tempMemoryVal);}private static int RsToMa(int i, int tempRegisterD) {// TODO Auto-generated method stubreturn (i=tempRegisterD);}private static int RsTimesRd(int i, int tempRegisterD) {// TODO Auto-generated method stubreturn (i*tempRegisterD)%1000;}private static int RsPlusRd(int i, int tempRegisterD) {// TODO Auto-generated method stubreturn (i+tempRegisterD)%1000;}private static int RsToRd(int i, int tempRegisterD) {// TODO Auto-generated method stubi=tempRegisterD;return i%1000;}private static int dTimesN(int i, int parseInt) {// TODO Auto-generated method stubreturn (i*parseInt)%1000;}private static int dPlusN(int i, int parseInt) {// TODO Auto-generated method stubreturn (i+parseInt)%1000;}private static int nToD(int parseInt) {// TODO Auto-generated method stubreturn parseInt%1000;}private static boolean errorRegisterDx(int testRegisterDx) {// TODO Auto-generated method stubboolean flagDx ;if(testRegisterDx<0||testRegisterDx>9){flagDx = true;}else{flagDx = false;}return flagDx;}}
- 挑战编程 程序设计竞赛训练手册-1.6.6 解释器(Interpreter)
- 序-挑战编程 程序设计竞赛训练手册
- 《挑战编程:程序设计竞赛训练手册》
- 挑战编程 程序设计竞赛训练手册-1.6.2 扫雷(Minesweeper)
- 挑战编程 程序设计竞赛训练手册-1.6.7 将军(Check_the_Check)
- 挑战编程程序设计竞赛训练手册(Programming Challenges)
- 《挑战编程:程序设计竞赛训练手册》- 题解(全)
- 挑战编程 程序设计竞赛训练手册-1.6.1 3n+1问题(3n+1 Problem)
- 挑战编程 程序设计竞赛训练手册-1.6.4 液晶显示屏(LC-Display)
- 挑战编程 程序设计竞赛训练手册-1.6.5 图形化编辑器(Graphical Editor)
- 挑战编程 程序设计竞赛训练手册-1.6.3 旅行(The Trip)
- 挑战编程 程序设计竞赛训练手册-1.6.8 澳大利亚投票(Australian Voting)
- 《挑战编程:程序设计竞赛训练手册》- 题解(第一章 - 第八章)
- 《挑战编程:程序设计竞赛训练手册》- 题解(第一章 - 第八章)
- 《挑战编程:程序设计竞赛训练手册》- 题解(第一章 - 第八章)
- 程序设计竞赛训练手册
- 挑战程序设计竞赛(1.6-p26)
- 1.6.6 解释器 Interpreter
- 如何将shp数据导入Oracle Spatial
- 【Oracle在线笔试题】const_cast的应用
- android聊天表情开发
- LoadRunner--信与不信之间
- Android对Linux内核的增强:Low Memory Killer(低内存管理)
- 挑战编程 程序设计竞赛训练手册-1.6.6 解释器(Interpreter)
- 常见的棋牌游戏网站支付接口
- linux (centos)目录
- 通过spring发送email
- bean标签库---Struts标签库
- 用户sa登录失败的解决办法
- 起步linux感悟
- UML的六大关系
- 寒假集训附加题目题解报告(7)——"数学好奇心"