全部评论 15

  • 通过创建虚拟机解决问题

    #include <cstdint>
    #include <vector>
    #include <array>
    #include <iostream>
    #include <stdexcept>
    class VM32{
    public:
    using u32=uint32_t;
    enum Registers{EAX,EBX,ESP,EIP,REG_COUNT};
    enum OpCode:u32{HALT=0x00000000,IN=0x0B000000,OUT=0x0C000000,ADD_REG=0x04000000};
    static constexpr size_t MEM_SIZE=16*1024*1024;
    VM32(){registers.fill(0);registers[ESP]=MEM_SIZE-4;memory.resize(MEM_SIZE,0);}
    void load_program(const std::vector<u32>&p,size_t s){if(s>memory.size())throw std::runtime_error("Program too large");for(size_t i=0;i<s;++i)memory[i]=p[i];}
    void run(){
    while(1){
    u32 eip=registers[EIP];
    if(eip>=memory.size())throw std::runtime_error("EIP out of bounds");
    u32 inst=memory[eip];registers[EIP]+=1;
    u32 op=inst&0xFF000000;u32 args=inst&0x00FFFFFF;
    switch(op){
    case HALT:return;
    case IN:{u32 r=args&0xFF;if(r>=REG_COUNT)throw std::runtime_error("Invalid reg");u32 v;std::cin>>v;registers[r]=v;break;}
    case OUT:{u32 r=args&0xFF;if(r>=REG_COUNT)throw std::runtime_error("Invalid reg");std::cout<<registers[r]<<std::endl;break;}
    case ADD_REG:{u32 s=(args>>16)&0xFF;u32 d=args&0xFF;if(s>=REG_COUNT||d>=REG_COUNT)throw std::runtime_error("Invalid reg");registers[d]+=registers[s];break;}
    default:throw std::runtime_error("Invalid opcode");
    }}}
    private:
    std::array<u32,REG_COUNT>registers;
    std::vector<u32>memory;
    };
    int main(){
    try{
    VM32 vm;
    std::vector<VM32::u32>p={0x0B000000|VM32::EAX,0x0B000000|VM32::EBX,0x04000000|(VM32::EBX<<16)|VM32::EAX,0x0C000000|VM32::EAX,0x00000000};
    vm.load_program(p,5);vm.run();
    }catch(const std::exception&e){std::cerr<<"VM Error: "<<e.what()<<std::endl;return 1;}
    return 0;
    }
    

    2026-03-23 来自 江苏

    1
  • 何意味

    2026-02-11 来自 浙江

    1
  • j

    2026-03-24 来自 浙江

    0
  • #include <bits/stdc++.h>
    int main(){
    long long a,b; stdcin>>a>>b; stdcout<<a+b;
    }

    2026-02-23 来自 浙江

    0
  • 这还要题解,孩子无敌了

    2026-02-14 来自 湖北

    0
  • a = input().split()
    b = int(a[0])
    c = int(a[1])
    d = c + b
    print(d)

    2026-02-13 来自 广东

    0
    • 对对对,这就是C++,孩子快写上去,哈哈哈哈哈哈哈哈哈哈哈哈哈哈

      python,别装

      2026-02-14 来自 湖北

      0
  • https://www.luogu.com.cn/article/kr464n3o

    2026-02-12 来自 浙江

    0
  • 喜欢题解是吧,行,我给你找个

    2026-02-12 来自 浙江

    0
  • 和溢位

    2026-02-12 来自 上海

    0
  • 无‘’

    2026-02-12 来自 澳门

    0
  • #include<iostream>
    using namespace std;
    int main(){
    int a,b;
    cin>>a>>b;
    cout<<a+b;
    return 0 ;
    }

    2026-02-12 来自 澳门

    0
  • A+B problem
    

    2026-02-12 来自 浙江

    0
  • 又是一个删评的,诶

    2026-02-11 来自 浙江

    0
  • 我是回别人的(他是另一个),况且我当时真没思路

    2026-02-11 来自 浙江

    0
  • YES_________________________________________________

    2026-02-11 来自 浙江

    0

热门讨论