• CCCC 正整数A+B


    题意:

    本题的目标很简单,就是求两个正整数A和B的和,其中A和B都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。

    输入格式:

    输入在一行给出A和B,其间以空格分开。问题是A和B不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。

    注意:我们把输入中出现的第1个空格认为是A和B的分隔。题目保证至少存在一个空格,并且B不是一个空字符串。

    输出格式:

    如果输入的确是两个正整数,则按格式“A + B = 和”输出。如果某个输入不合要求,则在相应位置输出“?”,显然此时和也是“?”。

    分析:这题很坑。

    1、A和B都在区间[1,1000]。

    2、前导0也算不合要求。

    #include<bits/stdc++.h>
    using namespace std;
    const double eps = 1e-8;
    string s;
    int ans;
    bool judge(string x){
        ans = 0;
        int len = x.size();
        for(int i = 0; i < len; ++i){
            if(i == 0 && x[i] == '0') return false;
            if(x[i] >= '0' && x[i] <= '9'){
                ans = ans * 10 + (x[i] - '0');
            }
            else return false;
        }
        if(ans > 1000 || ans == 0) return false;
        return true;
    }
    int main(){
        getline(cin, s);
        int len = s.size();
        string x;
        string y;
        for(int i = 0; i < len; ++i){
            if(s[i] == ' '){
                x = s.substr(0, i);
                y = s.substr(i + 1, len);
                break;
            }
        }
        bool ok = true;
        int tmp = 0;
        if(judge(x)){
            printf("%d + ", ans);
            tmp += ans;
        }
        else{
            ok = false;
            printf("? + ");
        }
        if(judge(y)){
            printf("%d = ", ans);
            tmp += ans;
        }
        else{
            ok = false;
            printf("? = ");
        }
        if(!ok) printf("?\n");
        else{
            printf("%d\n", tmp);
        }
        return 0;
    }
    

      

  • 相关阅读:
    VS2010快捷键
    mvc 简单的分页扩展
    Asp.net(C#)给图片加上水印效果
    HTML特殊字符编码大全
    获取URL上的参数值
    json数据的时间格式转换如:/Date(2342561534)/
    js中文编码到C#后台解码
    获取浏览器滚动条高度
    使用js画图
    silverlight实时从Javascript获取json数据
  • 原文地址:https://www.cnblogs.com/tyty-Somnuspoppy/p/6591841.html
Copyright © 2020-2023  润新知