题目大意
读入A和B,如果A和B在【1,1000】且为正整数,输出他们的和,如果不符合要求,对应的位置输出
思路
1.分情况讨论
2.都是数字的情况,和出现一个非数字以上
3.判读是否符合要求
坑点
1.分情况讨论
2.都是数字的情况,和出现一个非数字以上
3.判读是否符合要求
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
string a,b,c;
int numa=0,numb=0,sum=0;
cin>>a;//读入a
getchar();//吃空格
getline(cin,b);//读入b
//cout<<b;
int lena=a.length();//a的字符串长度
int lenb=b.length();//b的字符串长度
for(int i=0;i<lena;i++)//遍历字符串a
{
if(a[i]<'0'||a[i]>'9')//判断是否为数字
{
a='?';//如果不是数字就赋值问号
c='?';//c作为和,赋值问号
break;//跳出
}
}
for(int i=0;i<lenb;i++)//遍历字符串b
{
if(b[i]<'0'||b[i]>'9')//判断是否为数字
{
b='?';//如果不是数字就赋值问号
c='?';//c作为和,赋值问号
break;//跳出
}
}
if(b[0]!='?'&&a[0]!='?') //当a,b两个字符串都是数字时
{
for(int i=0;i<lena;i++)
{
numa=a[i]-'0'+numa;//转换为数字同时累加
if(i!=lena-1)
{
numa=numa*10;//如果不是一位数,则乘几次10
}
}
for(int i=0;i<lenb;i++)
{
numb=b[i]-'0'+numb;//转换为数字同时累加
if(i!=lenb-1)
{
numb=numb*10;//如果不是一位数,则乘几次10
}
}
//printf("%d %d\n",numa,numb);
if(numa<1||numa>1000)//判断是否符合区间
{
printf("?");
}else{
printf("%d",numa);
}
cout<<" + ";
if(numb<1||numb>1000)//判断是否符合区间
{
printf("?");
}else{
printf("%d",numb);
}
cout<<" = ";
if(numa>=1&&numa<=1000&&numb>=1&&numb<=1000)//判断是两个数是否同时符合区间
{
printf("%d",numa+numb);
}else{
cout<<"?";
}
return 0;
}
//如果两者有一者不是数字,进入下面。
cout<<a<<" + "<<b<<" = "<<c;
return 0;
}
总结
读清题意,找到规律的话会好写点