挑战编程 程序设计竞赛训练手册-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;}}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 银行卡给红包充值迟迟不到账怎么办 我想用信用卡往微信零钱充钱怎么办 修改密保手机跳过原手机验证怎么办 骏卡有用但是充不进去怎么办 在云南移动上充错话费了怎么办 手机版本太低安装不了支付宝怎么办 手机下载支付宝后找不到了怎么办 王者荣耀充值成功游戏未到账怎么办 银行卡号和密码都忘了怎么办 微信支付密码和银行卡号忘了怎么办 请问5位数的密码忘记了怎么办 苹果手机四位数密码忘记了怎么办 锡山教育app登陆密码忘了怎么办 新商盟手机订烟登录忘记密码怎么办 在qq上修改支付密码忘记怎么办 微信红包支付密码忘了怎么办 qq钱包绑定了别人的银行卡怎么办 用支付宝充手机话费怎么退款怎么办 我有个qq号丢了怎么办 微信红包密码输错了怎么办 qq钱包支付限额付不了款怎么办 电信手机没开流量被扣流量钱怎么办 运动鞋子买大了一码怎么办 淘宝直播间粉丝福利购优惠券怎么办 微信卡包的券不小心删了怎么办 0pp0手机官网手机总跳屏怎么办 很想买一部手机但是舍不得钱怎么办 自己没钱了还想贷款买手机怎么办 4g手机锁屏密码忘了怎么办 oppo手机锁屏密码忘了怎么办 三星手机锁屏密码忘了怎么办 网上买的手机想退了怎么办 沙棘排湿排毒后皮肤痒怎么办 做了沙棘排毒两次上上痒怎么办? 微信支付打款认证超时怎么办 微信上买东西钱付款了货没发怎么办 掌上道聚城王者轮回分解错了怎么办 鞋子脱胶了怎么办别傻傻用胶水粘 斗鱼主播积分太低无法收礼物怎么办 信誉积分没有了什么也玩不了怎么办 忘记自己电信卡号的密码怎么办