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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章