L1-025 正整数A+B
输入格式:输入在一行给出A和B,其间以空格分开。问题是A和B不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。
注意:我们把输入中出现的第1个空格认为是A和B的分隔。题目保证至少存在一个空格,并且B不是一个空字符串。
输出格式:
如果输入的确是两个正整数,则按格式A + B = 和输出。如果某个输入不合要求,则在相应位置输出?,显然此时和也是?。
我的代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
//string str1, str2;
string str;
bool flag1 = true, flag2 = true;
int num1 = 0, num2 = 0, i;
getline(cin, str);
for (i = 0; i < str.length(); i++){
if(str == ' '){
if(i == 0)
flag1 = false;
break;
}
num1 = num1 * 10 + str - '0';
if(str > '9' || str < '0' || num1 > 1000){
flag1 = false;
break;
}
}
while(str != ' ') ;
for (; i < str.length(); i++)
{
if(str == ' ')
break;
num2 = num2 * 10 + str - '0';
if (str > '9' || str < '0' || num2 > 1000)
{
flag2 = false;
break;
}
}
if(flag1 && flag2)
cout << num1 << " + " << num2 << " = " << num1 + num2 << endl;
else{
if(flag1)
cout << num1;
else
cout << "?";
cout << " + ";
if(flag2)
cout << num2;
else
cout << "?";
cout << " = ?" << endl;
//cout << (flag1 == true ? num1 : '?') << " + " << (flag2 == true ? num2 : '?') << " = " << '?' << endl;
}
system("pause");
return 0;
}
总是两个测试点过不去,我把字符串开始就是空格也考虑过了,中间多个空格也考虑过了,那俩测试点咋都过不去 之前做过的代码
#include <iostream>
#include <string>
using namespace std;
int to_int(string &num){
int ans = 0;
for(int i = 0; i < num.size(); ++i){
ans = ans * 10 + num-'0';
}
return ans;
}
int main(){
string num1 = "", num2 = "";
cin >> num1;
cin.get();
getline(cin,num2);
for(int i = 0; i < num1.size(); ++i){
if(num1<'0'||num1>'9'){
num1 = "?";
break;
}
}
for(int i = 0; i < num2.size(); ++i){
if(num2<'0'||num2>'9'){
num2 = "?";
break;
}
}
if(num1!="?"&&(to_int(num1)<1||to_int(num1)>1000))num1 = "?";
if(num2!="?"&&(to_int(num2)<1||to_int(num2)>1000))num2 = "?";
string ans = "";
if(num1=="?"||num2=="?"){
ans = "?";
}
else {
ans = to_string(to_int(num1)+to_int(num2));
}
cout << num1 << " + " << num2 << " = " << ans;
return 0;
} #include <bits/stdc++.h>
using namespace std;
int main()
{
//string str1, str2;
string str;
bool flag1 = true, flag2 = true;
int num1 = 0, num2 = 0, i = 0;
getline(cin, str);
while (str == ' ');
if (i != 0)i--;
for (; i < str.length(); i++) {
if (str == ' ')break;
if (str > '9' || str < '0') {
flag1 = false;
break;
}
else {
num1 = num1 * 10 + str - '0';
}
}
while (str != ' ');
for (; i < str.length(); i++)
{
if (str == ' ' || str > '9' || str < '0')
{
flag2 = false;
break;
}
else {
num2 = num2 * 10 + str - '0';
}
}
if (num1 < 1 || num1 > 1000)flag1 = false;
if (num2 < 1 || num2 > 1000)flag2 = false;
if (flag1 && flag2)
cout << num1 << " + " << num2 << " = " << num1 + num2 << endl;
else {
if (flag1)
cout << num1;
else
cout << "?";
cout << " + ";
if (flag2)
cout << num2;
else
cout << "?";
cout << " = ?" << endl;
//cout << (flag1 == true ? num1 : '?') << " + " << (flag2 == true ? num2 : '?') << " = " << '?' << endl;
}
system("pause");
return 0;
}
过滤掉开头的空格,以及对数字范围的判断就可以了 baige 发表于 2020-9-27 23:36
过滤掉开头的空格,以及对数字范围的判断就可以了
噢噢噢,我知道了,谢谢~
页:
[1]