7-5 正整数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
输入样例2:
22. 18
输出样例2:
? + 18 = ?
输入样例3:
-100 blabla bla...33
输出样例3:
? + ? = ?
AC代码:
#include<bits/stdc++.h>
using namespace std;
int panduan(char *str){
int length = strlen(str);
int n = 0,m = 1; //n作为计和的变量,m是计位数的变量
for(int i = length-1;i >= 0;i--){ //将字符串还原为整数值
if(str[i] < '0' || str[i] > '9'){ //若出现其它字符,说明不是整数,就返回0
return 0;
}
n = n + (str[i] - '0')*m;
m *= 10;
}
if(n > 1000) //因为可能有超出范围的整数,所以大于1000也返回0
return 0;
return n;
}
int main(){
char str1[1000],str2[1000];
cin >> str1; //第一个字符串不含空格
cin.getline(str2,1000); //第二个字符串要可能包含空格,且第一个字符一定为空格
str2[0] = '0'; //将第一个空格赋值为0,避免判断时出错,也对整数的还原没有影响
int c1 = panduan(str1);
int c2 = panduan(str2);
if(c1 == 0){
cout << "? + " ;
}else{
cout << c1 << " + ";
}
if(c2 == 0){
cout <<"?";
}else{
cout << c2;
}
if(c1 ==0||c2 == 0){
cout << " = ?";
}else{
cout << " = " << c1+c2;
}
}