L1-025 正整数A+B (15分)详解

 

思路:

 一开始我是用两个字符数组来做的,发现总有一些数据过不了emmm。。后来发现这道题有些坑,第一个字符串是可以为空的,所以决定用一个字符串变量存取,接着来找空格的位置。

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string S;
	int flagA = 0, flagB = 0;
	getline(cin, S);//用来接收包括空格在内的字符
	int sumA = 0, sumB = 0, Base;
	for (int i = 0; i < S.length(); i++)//找第一个空格
	{
		if (S[i] == ' ')//碰到第一个空格
		{
			Base = 1;//初始化
			if (i == 0)
			{
				flagA = 1;
			}
			for (int j = i - 1; j >= 0; j--)//计算A
			{
				if (S[j]<'0' || S[j]>'9')//如果字符不为数字
				{
					flagA = 1;
					break;//标识,退出
				}
				else
				{
					sumA += Base * (S[j] - '0');//如果是数字,
					Base *= 10;
				}

			}
			if (sumA > 1000 || sumA < 1)
			{
				flagA = 1;
			}
			Base = 1;//重新初始化
			for (int j = S.length() - 1; j > i; j--)//计算B
			{
				if (S[j]<'0' || S[j]>'9')
				{
					flagB = 1;
					break;
				}
				else
				{
					sumB += Base * (S[j] - '0');
					Base *= 10;
				}
			}
			if (sumB > 1000 || sumB < 1)
			{
				flagB = 1;

			}
			break;//注意及时跳出大循环

		}
	}
//输出设置
	if (flagA)
	{
		cout << "? ";
	}
	else
	{
		cout << sumA << " ";
	}
	cout << "+ ";
	if (flagB )
	{
		cout << "? ";
	}
	else
	{
		cout << sumB << " ";
	}
	cout << "= ";
	if (flagA || flagB)
	{
		cout << "?";
	}
	else
	cout << sumA + sumB;
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43535668/article/details/104452438
今日推荐