7-1 正整数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:
? + ? = ?
源代码如下:
#include<iostream>
int main() {
using namespace std;
char a[100];
long int d,c[2];
int i,w=0;
int k[2] = {2,2};
for (int x = 0; x < 2; x++) {
for (i = 0; i < 1000; i++) {
scanf("%c", &a[i]);
if(x==0) if (a[i] == ' ') break;
if (x == 1) if (a[i] == '\n') break;
if (a[i] < '0' || a[i] > '9') k[x] = 0;
}
if (a[0] == ' ') k[x] = 0;
if (k[x] == 0) printf("?");
else {
c[x] = atoi(a);
if(c[x]>=1&&c[x]<=1000) printf("%d", c[x]);
else {
printf("?");
k[x] = 0;
}
}
if(x==0) printf(" + ");
if (x == 1) {
printf(" = ");
if(k[0]==0||k[1]==0) printf("?");
else {
printf("%d", c[0] + c[1]);
}
}
}
return 0;
}
提交结果
提交时间 | 状态 | 分数 | 题目 | 编译器 | 耗时 | 用户 |
---|---|---|---|---|---|---|
2018/5/7 20:51:52 | 答案正确 | 15 | 7-1 | C++ (g++) | 3 ms | 2017403663 |
测试点 | 提示 | 结果 | 耗时 | 内存 |
---|---|---|---|---|
0 | sample 1 正常 | 答案正确 | 2 ms | 272KB |
1 | sample 2 带小数点的实数 | 答案正确 | 3 ms | 272KB |
2 | sample 3 负数和带空格的字符串 | 答案正确 | 2 ms | 276KB |
3 | 最小边界数,两整数后面跟多余字符 | 答案正确 | 2 ms | 384KB |
4 | 正常边界测试 | 答案正确 | 3 ms | 276KB |
5 | 非正常边界测试 | 答案正确 | 2 ms | 384KB |
6 | 非正常边界测试 | 答案正确 | 2 ms | 272KB |