hdoj 1228 A + B 字符串处理

A + B

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


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
 
  
39096
 

Source
#include<stdio.h>
#include<string.h>
int main(){
	char str[110],s[110];
	while(gets(str)){
		int len=strlen(str);
		int num1=0,num2=0;
		int flag=0,num=0;//flag用于标记是否遇到过加号,这决定着是否将数字加到第二个数上边
		int k=0;
		for(int i=0;i<len-1;i++){
			if(str[i]>='a'&&str[i]<='z'){
				s[k++]=str[i];//这个已经相当于一个技巧了,从长字符串中截取一小段字符串 
				continue;
			}
			if(str[i]==' '&&str[i-1]!='+'){
				s[k]='\0';
				k=0;
				if(!strcmp(s,"zero")) num=0;
				else if(!strcmp(s,"one")) num=1;
				else if(!strcmp(s,"two")) num=2;
				else if(!strcmp(s,"three")) num=3;
				else if(!strcmp(s,"four")) num=4;
				else if(!strcmp(s,"five")) num=5;
				else if(!strcmp(s,"six")) num=6;
				else if(!strcmp(s,"seven")) num=7;
				else if(!strcmp(s,"eight")) num=8;
				else if(!strcmp(s,"nine")) num=9;
				if(!flag){
					num1=num1*10+num;
				}
				else{
					num2=num2*10+num;
				}
			}
			if(str[i]=='+')
			flag=1;
			i=i+k;
		}
		if(num1==0&&num2==0)//防止题目给出zero zero这种情况,所以不直接判断是否第1个和第8字符是否为0 
		break;
		else
		printf("%d\n",num1+num2);
	}
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/Dear_Jia/article/details/80395513