陈越大佬的题目让我很无语,这个bug,我启用了debug都改了将近2小时;呜呜呜,acm本就逆天而行,死在路上很正常;
坚持+努力,便可换得前程似锦
题目链接
L1-025 正整数A+B
解题思路:
1.因为想到会有乱码,而且会有空格,就想到用一个很长的字符数组去储存A,B
2.先用alen,blen测A,B的长度,用两个变量布尔变量标记A,B是否合格
3.用三个for循环,第一个测A的长度,第二个测交界处的空格数量,第三个测B的长度
4.用两个for循环分别遍历A,B,标记里面非数字的字符,并改变标签bool变量的值
5.当两个bool变量为真用两个if语句,去计算A,B的数值大小
6.分情况讨论输出
#include <iostream>
#include <cstring>
#include <iomanip>
using namespace std;
int main()
{
char a[1000]; // 用一个很长的字符数组a[1000]去储存A,B
memset(a,'\0',sizeof(a));
cin.getline(a,1000);
int alen=0,blen=0; //用alen,blen测A,B的长度
bool ajudge= true,bjudge= true; // 用两个变量布尔变量标记A,B是否合格
for (int i = 0; a[i] !=' ' ; ++i) {
alen++; // 测A的长度
}
int flag=0,aflag=alen;
for (int m = alen; a[m] ==' ' ; ++m) {
flag++; // 测交界处的空格数量
}
for (int j = alen+flag; a[j] !='\0' ; ++j) {
blen++; //测B的长度
}
for (int k = 0; k <alen ; ++k) {
if (a[k]>'9'||a[k]<'0')
{
ajudge= false; // 标记里面非数字的字符,并改变标签bool变量的值
break;
}
}
for (int l = alen+flag; a[l]!='\0' ; ++l) {
if (a[l]>'9'||a[l]<'0')
bjudge= false; // 标记里面非数字的字符,并改变标签bool变量的值
}
int avalue=0,bvalue=0;
if (ajudge) // bool变量为真
{
int i=0;
while (alen--)
{
avalue=avalue*10+a[i++]-'0'; // 计算A的值
}
if (avalue<1||avalue>1000) // 判断是否范围越界
ajudge= false;
}
if (bjudge)
{
int i=aflag+flag;
while (blen--)
{
bvalue=bvalue*10+a[i++]-'0';
}
if (bvalue<1||bvalue>1000)
bjudge= false;
} // 分情况讨论输出
if (ajudge&&bjudge)
{
cout<<avalue<<" "<<"+"<<" "<<bvalue<<" "<<"="<<" "<<avalue+bvalue<<endl;
}
if (!ajudge&&bjudge)
{
cout<<"?"<<" "<<"+"<<" "<<bvalue<<" "<<"="<<" "<<"?"<<endl;
}
if (ajudge&&!bjudge)
{
cout<<avalue<<" "<<"+"<<" "<<"?"<<" "<<"="<<" "<<"?"<<endl;
}
if (!ajudge&&!bjudge)
{
cout<<"?"<<" "<<"+"<<" "<<"?"<<" "<<"="<<" "<<"?"<<endl;
}
return 0;
}