九度OJ 1010 A+B

题目链接:http://ac.jobdu.com/problem.php?pid=1010


题目分析:

先写一个函数将输入的数字单词转化为对应的数字,在计算值的时候调用该函数。

主要的算法在于对于输入字符串的逻辑判断,即:输入几个数字单词,什么时候打印值。

我的设计思想是:首先读入一个数字单词,然后读入下一个输入的字符串(中间判断空格在这里就不说了),判断先一个字符串是加号还是数字单词。是加号的话,继续输入字符串,那么这个必然是数字单词,再继续输入,判断是等于号还是数字单词,这里两种情况结果就都可以输出了;第一个数字单词之后如果依然是数字单词的话,那么继续输入,必然是加号,在进行上面加号之后的判断,依然有两种情况的输出。最后再判别一下都是0的退出情况。


源代码:

 

#include <iostream>

#include <string>

#include <stdio.h>

using namespace std;



int toInteger(string A)

{

	if(A=="one")

		return 1;

	else if(A=="two")

		return 2;

	else if(A=="three")

		return 3;

	else if(A=="four")

		return 4;

	else if(A=="five")

		return 5;

	else if(A=="six")

		return 6;

	else if(A=="seven")

		return 7;

	else if(A=="eight")

		return 8;

	else if(A=="nine")

		return 9;

	else if(A=="zero")

		return 0;

	else

		return -1;

}



int main()

{

	string A1,A2,B1,B2,t1,t2;

	int num1,num2,sum;

	while (cin>>A1)

	{

		num1 = toInteger(A1);

		char c;

		c = getchar();

		if (c == ' ')

		{

			cin>>t1;

			if (t1[0] == '+')	//判断第二个输入字符串为+

			{

				c = getchar();

				if (c == ' ')

				{

					cin >> B1;	//输入第三个字符串数字单词

					num2 = toInteger(B1);

					c = getchar();

					if (c == ' ')

					{

						cin>>t2;

						if (t2[0] == '=')	//判断最后输入的字符串为=

						{

							if (num1 == 0 && num2 == 0)

							{

								break;

							}

							else

							{

								cout<<num1 + num2<<endl;

							}

						}

						else	//不是=,为数字单词

						{

							num2 = num2 * 10 + toInteger(t2);

							cout<<num1 + num2<<endl;

						}

					}

				}

			}

			else	//第一个数字单词之后不为+,则为另一个数字单词

			{

				num1 = num1 * 10 + toInteger(t1);



				c = getchar();

				if (c == ' ')

				{

					cin >> t1;	//输入加号

					c = getchar();

					if (c == ' ')

					{

						cin >> B1;	//输入第三个字符串数字单词

						num2 = toInteger(B1);

						c = getchar();

						if (c == ' ')

						{

							cin>>t2;

							if (t2[0] == '=')	//判断最后输入的字符串为=

							{

								cout<<num1 + num2<<endl;

							}

							else	//不是=,为数字单词

							{

								num2 = num2 * 10 + toInteger(t2);

								cout<<num1 + num2<<endl;

							}

						}

					}

				}

			}

		}

	}

	return 0;

}


 

 

你可能感兴趣的:(OJ)