九度OJ:题目1010 A+B

题目描述:
读入两个小于100的正整数A和B,计算A+B.
需要注意的是:A和B的每一位数字由对应的英文单词给出.
输入:
测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B =",相邻两字符串有一个空格间隔.当A和B同时为0时输入结束,相应的结果不要输出.
输出:
对每个测试用例输出1行,即A+B的值.
样例输入:
one + two =
three four + five six =
zero seven + eight nine =
zero + zero =
样例输出:
3
90

96

[解题思路]

首先,写一个函数将英文单词转化为数字,如下:

int judgeNum(char* num){
	if(strcmp(num,"zero")==0) return 0;
	else if(strcmp(num,"one")==0) return 1;
	else if(strcmp(num,"two")==0) return 2;
	else if(strcmp(num,"three")==0) return 3;
	else if(strcmp(num,"four")==0) return 4;
	else if(strcmp(num,"five")==0) return 5;
	else if(strcmp(num,"six")==0) return 6;
	else if(strcmp(num,"seven")==0) return 7;
	else if(strcmp(num,"eight")==0) return 8;
	else if(strcmp(num,"nine")==0) return 9;
	else return -1;
}

该函数将单词转化为数字后返回,那么怎样处理返回来的数字呢?

然后我们观察输入的样式,前后是由"+"隔开的,所以我们需要分别用两个整形(假设为a,b)记录前后的数字;

在数字传回来之后,因为输入有两位数(比如 one two表示12) ,这时候我们应该将a,b初始化为0,可用a=10*a+(传回来的数)进行确定a,b的值,代码如下:

		while(ch!='\n'){
			scanf("%s",num);
			if(strcmp(num,"+")==0) sign=1;//标记是否出现"+"
			if(strcmp(num,"=")==0) break;//一定要加,否则最后可能不会终止程序
			if((strcmp(num,"+")!=0)&&(strcmp(num,"=")!=0)){//传入的不能为符号
				if(!sign) a=10*a+judgeNum(num);
				else b=10*b+judgeNum(num);
			}
			ch=getchar();
		}

[程序代码]

#include<stdio.h>
#include<string.h>

int judgeNum(char* num){
	if(strcmp(num,"zero")==0) return 0;
	else if(strcmp(num,"one")==0) return 1;
	else if(strcmp(num,"two")==0) return 2;
	else if(strcmp(num,"three")==0) return 3;
	else if(strcmp(num,"four")==0) return 4;
	else if(strcmp(num,"five")==0) return 5;
	else if(strcmp(num,"six")==0) return 6;
	else if(strcmp(num,"seven")==0) return 7;
	else if(strcmp(num,"eight")==0) return 8;
	else if(strcmp(num,"nine")==0) return 9;
	else return -1;
}
int main(){
	char num[40];
	while(1){
		int a=0,b=0;
		char ch=' ';
		int sign=0;
		while(ch!='\n'){
			scanf("%s",num);
			if(strcmp(num,"+")==0) sign=1;//标记是否出现"+"
			if(strcmp(num,"=")==0) break;//一定要加,否则最后可能不会终止程序
			if((strcmp(num,"+")!=0)&&(strcmp(num,"=")!=0)){//传入的不能为符号
				if(!sign) a=10*a+judgeNum(num);
				else b=10*b+judgeNum(num);
			}
			ch=getchar();
		}
		if(a==0&&b==0) break;
		else{
			printf("%d\n",a+b);
		}
	}
	return 0;
}
/*
one + two =
three four + five six =
zero seven + eight nine =
zero + zero =
*/
[题目网址]
http://ac.jobdu.com/problem.php?pid=1010

你可能感兴趣的:(算法,九度OJ)