• L1-025 正整数A+B


    题目:

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

    输入格式:

    输入在一行给出AB,其间以空格分开。问题是AB不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。注意:我们把输入中出现的第1个空格认为是AB的分隔。题目保证至少存在一个空格,并且B不是一个空字符串。

    输出格式

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

    输入样例1:

    123 456

    输出样例1:

    123 + 456 = 579

    输入样例2:

    22. 18

    输出样例2:

    ? + 18 = ?

    输入样例3:

    -100 blabla bla...33

    输出样例3:

    ? + ? = ?

    思路:

        自定义一个函数判断字符串是否为[1,1000]间的整数。用getline接收一行的字符串,再根据第一个空格使用substr进行划分两个字符串。分别调用函数判断这俩字符串是否符合要求,后面的比较好写。

    知识点for me:

    1、不能像这样输出字符串:printf("%s + %s = %s",s1,s2,res);因为printf只能输出C语言内置的数据,而string不是内置的。如果要用printf输出字符串应该加一个.c_str(),比如printf("%s ", s.c_str());。

    2、在用C++的string时也不能使用scanf读取输入。如果一定要用scanf读取的话要这么做:char str[10];  scanf("%s",str); 注意这里没有加&,因为在C语言中数组名就代表该数组的起始地址。涉及到string的输入输出时干脆还是全部用cin,cout或者是getline(cin,str) 读取一行字符串。

    3、stoi()可以将string转换成int,stod()可以将string转换成double;to_string()可以将int、double、float等类型的变量转换成string。它们的头文件都是#include <string>。这都是C++11的特性。

    上代码:

    #include <cctype>
    #include <string>
    #include <iostream>
    using namespace std;
    bool islegal(string s)
    {
        for(int i=0;i<s.length();i++)
        {
            if(!isdigit(s[i]))
                return false;
        }
        if(1<=stoi(s)&&1000>=stoi(s)){
            return true;
        }else{
            return false;
        }
    }
    int main()
    {
       string s,s1,s2,res;
       getline(cin, s);
       for(int i=0;i<s.length();i++)
       {
               if(s[i]==' '){
                   s1=s.substr(0,i);
                   s2=s.substr(i+1);
                   break;
               }
       }
       if(!islegal(s1))
       {
               s1="?";
               res="?";
       }          
       if(!islegal(s2))
       {
               s2="?";
            res="?";       
       }
       if(islegal(s1)&&islegal(s2)){
             res=to_string(stoi(s1)+stoi(s2));
       }        
       cout<<s1<<" + "<<s2<<" = "<<res;    
       return 0;
    }

  • 相关阅读:
    linux每日命令(29): chown命令
    linux每日命令(28): charp命令
    linux每日命令(27): chmod命令
    linux每日命令(26):Linux文件属性详解
    linux每日命令(25): linux文件类型与扩展名
    linux每日命令(24): linux目录结构
    linux每日命令(23): find命令之xargs
    linux每日命令(22): find命令参数详解
    2017年12月31日
    Python使用otp实现二步验证
  • 原文地址:https://www.cnblogs.com/littleLittleTiger/p/10361899.html
Copyright © 2020-2023  润新知