版权声明:欢迎转载博客(转载时请附上原文链接^_^) https://blog.csdn.net/OneLine_/article/details/87949240
还是补寒假作业ing......
本来以为A+B很简单的 没想到错了n多次
上题目
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
输入样例2:
22. 18
输出样例2:
? + 18 = ?
输入样例3:
-100 blabla bla...33
输出样例3:
? + ? = ?
最初的思路就是
先用scanf读入空格前的一串字符串
再用scanf读入空格后的剩余字符串
计算字符串长度
判断所有字符都是 0 ~ 9之内的数
同时字符串形成的数字范围在【1,1000】之间
但是这样的话 若是空格后的字符中仍存在字符 则缺少读入
例如: 123 3 4
输出结果应该是 123 + ?= ?
(后一串字符不符合要求)
思考了一波之后 (借鉴网上的答案)
决定用 gets 读入
但是! 还是不行
(不知道大佬们是怎么用gets过的)
所以 又学(bai)习(du)了一波
看到一个很有用的东东
如下图
so 把scanf输入改动一下
这样就过了
放代码
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
using namespace std;
int main()
{
char a[1000],b[1000];
int sum1=0,sum2=0;
bool flag1 =true,flag2=true;
int len1,len2;
scanf("%s",a);
len1 = strlen(a);
for (int i=0;i<len1;i++)
{
if (a[i]>'9'||a[i]<'0')
flag1=false;
}
if (flag1)
{
sum1=a[0]-'0';
for (int i=1;i<len1;i++)
sum1=sum1*10+(a[i]-'0');
}
getchar();
scanf("%[^\n]",b);
len2 = strlen(b);
for (int i=0;i<len2;i++)
{
if (b[i]>'9'||b[i]<'0')
flag2=false;
}
if (flag2)
{
sum2 = b[0]-'0';
for (int i=1;i<len2;i++)
sum2 = sum2*10+(b[i]-'0');
}
// printf("%d %d ",len1,len2);
if (flag1&&sum1>=1&&sum1<=1000)
printf("%d + ",sum1);
else printf("? + ");
if (flag2&& sum2>=1&&sum2<=1000)
printf("%d = ",sum2);
else printf("? = ");
if (flag1&&sum1>=1&&sum1<=1000 && flag2&& sum2>=1&&sum2<=1000)
printf("%d",sum1+sum2);
else printf("?");
return 0;
}
不定时更新~