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;
}
时间: 2024-10-07 21:50:19

HDU 1228 另类A+B的相关文章

[ACM] hdu 1228 A+B (字符串处理)

A + B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 11543    Accepted Submission(s): 6699 Problem Description 读入两个小于100的正整数A和B,计算A+B. 需要注意的是:A和B的每一位数字由对应的英文单词给出. Input 测试输入包含若干测试用例,每个测试用例占一行,

HDU 1228 A + B 的浙大考研题

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 + eig

hdu 1228 A + B 详细题解 字符串/哈希

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1228 这道题可以同时用两种方法做,第一种是字符串,第二种是哈希. 第一种方法: 我们可以定义一个字符串类型的二位数组,存放"zero"--"nine"十个字符串 这十个字符串可以与下标0--9一一对应.这样就可以建立字符串与数字之间的关系了 char a[][10]={"zero","one","two",&q

题解报告:hdu 1228 A+B

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1228 题解思路:这道题本来想用gets函数,循环读进来的字符串,把每一个单词存到二维数组里面,再与已存在的二维数组进行比较.但看了别人的题解后才发现忘了scanf有这个功能即遇到空格.换行.回车.水平制表符.换页符.垂直制表符就会停止读取(这里用到的是空格的功能),不仅效率高,而且思路清晰,代码简洁. AC代码: 1 #include<bits/stdc++.h> 2 using namespac

HDU 1228 A+B

A + B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 14543    Accepted Submission(s): 8629 Problem Description 读入两个小于100的正整数A和B,计算A+B.需要注意的是:A和B的每一位数字由对应的英文单词给出. Input 测试输入包含若干测试用例,每个测试用例占一行,格式

HDU 1228 A + B (水题)

A + B Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 13260 Accepted Submission(s): 7797 Problem Description 读入两个小于100的正整数A和B,计算A+B. 需要注意的是:A和B的每一位数字由对应的英文单词给出. Input 测试输入包含若干测试用例,每个测试用例占一行,格式为"A

HDU 1228 字符串到数字的转化

一道水题,练练字符串的输入输出 1 #include <cstdio> 2 #include <cstring> 3 4 using namespace std; 5 char s1[15] , s2[15]; 6 7 int get_num(char *s) 8 { 9 if(s[0] == 'z') return 0; 10 else if(s[0] == 'o') return 1; 11 else if(s[0] == 't' && s[1] == 'w')

【HDU 1228】A + B

题 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 nin

hdu 1228

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