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的每一位数字由对应的英文单词给出.
需要注意的是: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;
}