前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PTA刷题记录:L1-025 正整数A+B (15分)

PTA刷题记录:L1-025 正整数A+B (15分)

作者头像
英雄爱吃土豆片
发布2020-10-29 10:48:16
1.1K0
发布2020-10-29 10:48:16
举报
文章被收录于专栏:英雄爱吃土豆片

L1-025 正整数A+B (15分)

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

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

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

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

输入样例1: 123 456 输出样例1: 123 + 456 = 579

解题思路: 字符串操作,判断输入的字符串是否满足题目给出的要求,并分别使用两个变量标记。输出时进行相应判断即可。需要使用到 atoi 函数进行字符串到 int 型数据的转换,以便进行比较和加法运算。

需要注意: 1)输入的数字若超出 [1, 1000] 这个区间,也算是无效的正整数。(踩中的一个坑)。 2)第二个字符串使用 getline 读取时,需要在 getline 前清空一个字符,或者在 getline 后删除字符串的第一个字符。因为这个字符肯定是空格,会影响判断结果。

通关代码:

代码语言:javascript
复制
#include <iostream>
#include <string>

using namespace std;

bool isNum(string str) {
	bool flag;
	for (string::iterator i = str.begin(); i != str.end(); i++) {
		if ((*i > '9' || *i < '0') || (atoi(str.c_str()) > 1000 || atoi(str.c_str()) <= 0)) {
			flag = false;
			break;
		} else {
			flag = true;
		}
	}
	
	return flag;
}

int main() {
	string rvalue, lvalue;
	bool lIsNum, rIsNum;
	
	cin >> lvalue;
	cin.ignore();
	getline(cin, rvalue);
	
	
	if ((lIsNum = isNum(lvalue)) == true) {
		cout << lvalue;
	} else {
		cout << '?';
	}
	
	cout << " + ";
	
	if ((rIsNum = isNum(rvalue)) == true) {
		cout << rvalue;
	} else {
		cout << '?';
	}
	
	cout << " = ";
	
	if (lIsNum == false || rIsNum == false) {
		cout << '?';
		return 0;
	} else {
		cout << atoi(lvalue.c_str()) + atoi(rvalue.c_str());
	}
	
	return 0;
}

通关截图:

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/08/12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • L1-025 正整数A+B (15分)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档