这道题目,只不过把加法拐了个弯,数字用英文单词的方式给出,本质其实没有变化。我们要做的,只是根据单词识别出它所代表的数字。
Java代码如下:
import java.util.*; public class Main{ public static void main(String[] args){ Scanner cin = new Scanner(System.in); while(cin.hasNext()){ String s = cin.nextLine(); int temp = 0, res = 0; for(int i = 0; i < s.length(); i++){ //temp用于存储加数 //当加数为两位数时,例如one two表示12,中间有个空格,需要做判断,0x20是空格的十六进制ASCII码 if(i == 0 || (s.charAt(i-1) == 0x20 && s.charAt(i) != ‘+‘ && s.charAt(i) != ‘=‘)){ temp = temp*10+str2num(s,i); } else if(s.charAt(i) == ‘+‘){ res += temp; temp = 0; } else if(s.charAt(i) == ‘=‘){ //这时res为第一个加数的值,temp为第二个加数的值,如果两个都为0,根据题意,退出 if(temp == 0 && res == 0) return ; else{ res += temp; temp = 0; } } } System.out.println(res); } } //单词转数字,用switch解决 public static int str2num(String s,int index){ switch(s.charAt(index)){ case ‘z‘:return 0;//zero case ‘o‘:return 1;//one case ‘t‘: if(s.charAt(index+1) == ‘w‘) return 2;//two else return 3;//three case ‘f‘: if(s.charAt(index+1) == ‘o‘) return 4;//four else return 5;//five case ‘s‘: if(s.charAt(index+1) == ‘i‘) return 6;//six else return 7;//seven case ‘e‘:return 8;//eight case ‘n‘:return 9;//nine default:return 0; } } }
时间: 2024-10-27 19:55:46