首页 > 代码库 > HDU 1228 另类A+B

HDU 1228 另类A+B

直接上题目,,略无聊。。

A + B

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 12635    Accepted Submission(s): 7407


Problem Description
读入两个小于100的正整数A和B,计算A+B.
需要注意的是:A和B的每一位数字由对应的英文单词给出.


 

Input
测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B =",相邻两字符串有一个空格间隔.当A和B同时为0时输入结束,相应的结果不要输出.


 

Output
对每个测试用例输出1行,即A+B的值.


 

Sample Input
one + two = three four + five six = zero seven + eight nine = zero + zero =


 

Sample Output
3 90 96


 

Source
浙大计算机研究生复试上机考试-2005年

 

 

 

 

主要思想就是输入考虑加号前,等号前的两个字符窜情况,即输入两个字符窜。上代码附详细解析。

#include <stdio.h>
#include <string.h>
int main()
{
	while(1)  //多组数据
	{
		
		int sum=0,i;
		int x=0;
		char a[5000];
		int b[5000];  //  用一个整型数组存放数字
		int l=0;
		int d[5000];//同上
		memset(b,0,sizeof(b));//初始化
		memset(d,0,sizeof(d));//同上
		while(scanf("%s",a)&&strcmp(a,"+")!=0)//先输入一个字符窜 如果等于+就跳出
		{
			if(strcmp(a,"zero")==0)
				b[l++]=0;
			if(strcmp(a,"one")==0)
				b[l++]=1;
			if(strcmp(a,"two")==0)
				b[l++]=2;
			if(strcmp(a,"three")==0)
				b[l++]=3;
			if(strcmp(a,"four")==0)
				b[l++]=4;
			if(strcmp(a,"five")==0)
				b[l++]=5;
			if(strcmp(a,"six")==0)
				b[l++]=6;
			if(strcmp(a,"seven")==0)
				b[l++]=7;
			if(strcmp(a,"eight")==0)
				b[l++]=8;
			if(strcmp(a,"nine")==0)
				b[l++]=9;
		}//以上比较各个字符窜是否等于相应的单词,等于的话直接将数字存入数组。
		for(i=0;i<l;i++)
			x=x*10+b[i];//  这里是关键,比如three four 算法是0*10+3  x=3。x=3*10+4  。x=34。
		sum+=x;
		x=0;
		l=0;//重新赋值
		char c[5000];
		while(scanf("%s",c)&&strcmp(c,"=")!=0)//再输入另一个字符窜,等于等号的话就跳出。
		{
			if(strcmp(c,"zero")==0)
				d[l++]=0;
			if(strcmp(c,"one")==0)
				d[l++]=1;
			if(strcmp(c,"two")==0)
				d[l++]=2;
			if(strcmp(c,"three")==0)
				d[l++]=3;
			if(strcmp(c,"four")==0)
				d[l++]=4;
			if(strcmp(c,"five")==0)
				d[l++]=5;
			if(strcmp(c,"six")==0)
				d[l++]=6;
			if(strcmp(c,"seven")==0)
				d[l++]=7;
			if(strcmp(c,"eight")==0)
				d[l++]=8;
			if(strcmp(c,"nine")==0)
				d[l++]=9;
		}
		for(i=0;i<l;i++)
			x=x*10+d[i];//方法都上。。
		sum+=x;//加到的sum就是最后答案。
		if(sum)
			printf("%d\n",sum);//如果sum真,就输出。
		else
			return 0;//否则就跳出去。
		memset(b,0,sizeof(b));
		memset(d,0,sizeof(d));//继续初始化为了保险。
	}
	return 0;
}


 

HDU 1228 另类A+B