样例过不了,但是AC????

P1957 口算练习题

winterl @ 2023-04-22 23:14:40

#include <string>
#include <sstream>
#include <iostream>
int main(){
    int n, mode = -1;
    std::cin >> n;
    std::stringstream ss;
    while(n--){
        std::string s, tmp;
        char c;
        std::cin >> c;
        if('a' <= c and c <= 'c'){
            mode = c - 'a';
            std::cin.get();
        }
        else
            s += c;
        std::getline(std::cin, tmp);
        s+=tmp;
        ss << s;
        int a, b, ans;
        ss >> a >> b;
        std::cout << a;
        switch(mode){
        case 0: std::cout.put('+'); ans = a + b; break;
        case 1: std::cout.put('-'); ans = a - b; break;
        case 2: std::cout.put('*'); ans = a * b; break;
        }
        ss.clear();
        std::cout << b << '=' << ans << '\n' 
        << s.length() + std::to_string(ans).length() << '\n';
    }
    return 0;
}

如果过样例,最后应该是s.length() + 1 + std::to_string(ans).length(),但是现在这个样例过不了,但是AC了???


by winterl @ 2023-04-22 23:25:31

补一下注释,可能是有地方我考虑漏了,希望有神犇能帮我找出来

//介于本人的习惯,不想写using namespace std,所以需要加std::来指定变量的命名空间
#include <string>   //调用std::to_string用
#include <sstream>  //StringStream字符串流
#include <iostream>
int main(){
    int n, mode = -1;
    std::cin >> n;
    //定义字符串流对象
    std::stringstream ss;
    while(n--){
        std::string s, tmp;
        char c;
        std::cin >> c;
        if('a' <= c and c <= 'c'){
            mode = c - 'a';
            //回收空格
            std::cin.get();
        }
        else
            //若不是字母,将这个字符添加到字符串尾
            s += c;
        //读一行,不保留换行符
        std::getline(std::cin, tmp);
        //合并
        s+=tmp;
        //打入字符串流
        ss << s;
        int a, b, ans;
        //从字符串流中获取数据
        ss >> a >> b;
        //先输入第一个数
        std::cout << a;
        switch(mode){
        //判断,输出运算符的同时计算结果
        case 0: std::cout.put('+'); ans = a + b; break;
        case 1: std::cout.put('-'); ans = a - b; break;
        case 2: std::cout.put('*'); ans = a * b; break;
        }
        //清空字符串流中的内容
        ss.clear();
        //打印第二个数和结果
        std::cout << b << '=' << ans << '\n' 
        //计算长度 (输入(从第一个数字字符开始到最后一个数字字符结束)+ 结果的长度)
        //【就是这里没明白,这里应该再加上=的长度,也就是再+1,这样是符合样例的,但是0分,把+1去掉后,样例不对,但是是AC代码】
        //注:to_string函数可以将其他类型转换为std::string对象
        //如:(整型)230 -> (std::string对象)"230"
        << s.length() + std::to_string(ans).length() << '\n';
    }
    return 0;
}

|