马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目地址: https://www.luogu.com.cn/problem/P1597
我的代码:#include<iostream>
using namespace std;
string n;
int a, b, c;
string get_order() { // 获取指令,并从n中删除这一条指令
int x = n.find(";");
string order = n.substr(0, x);
n.erase(0, x+1);
return order;
}
int get_number(string num) { // 将字符串转化为数字
int number = 0;
for(int i=num.length()-1; i>=0; --i) {
number *= 10;
number += (num.c_str()[i] - '0');
}
return number;
}
void execute_order(string order) { // 执行指令
string left = order.substr(0, order.find(":")); //获取等号左边的值
order.erase(0, order.find("="));
string rightemp = order; //获取等号右边的值
int right;
if(rightemp[0] == 'a') right = a;
else if(rightemp[0] == 'b') right = b;
else if(rightemp[0] == 'c') right = c;
else right = get_number(rightemp);
if(left[0] == 'a') a = right; //赋值
else if(left[0] == 'b') b = right;
else if(left[0] == 'c') c = right;
}
int main()
{
cin>>n;
while(n.length()) {
execute_order(get_order());
}
cout<<a<<" "<<b<<" "<<c;
return 0;
}
输入:a:=3;b:=4;c:=5;
输出:43 53 63
请问这是怎么回事
本帖最后由 dolly_yos2 于 2022-9-24 15:43 编辑
把传入 get_number 函数的参数打印出来试试,您会发现有趣的事情的。
另外这个并不是这段代码的唯一问题,只不过另一个(我发现的)问题由于这道题目的输入限制而恰好被避免掉了。
说到题目的输入限制,这道题目的输入格式非常简单且固定,您编写的代码实际上超出了解决这道题需要的复杂度。每一个赋值语句的格式精确为 < 1 字节变量名>:=<1 字节变量名> | <1 位整数>; ,解析这样的格式可能远不需要您目前的实现方式。
|