ECNU 3186 A+B

ECNU 3186 A+B

链接

https://acm.ecnu.edu.cn/problem/3186/

题目

单点时限: 2.0 sec

内存限制: 256 MB

读入两个小于100的非负整数A和B,计算A+B。

需要注意的是:A和B的每一位数字由对应的英文单词给出。

输入格式
第1行:整数t(1 <= t <= 10 ) 为测试数据组数。

第2~t+1行:每个问题输入一行,格式为:A + B =,相邻两字符串之间用一个空格间隔。

输出格式
对于每个问题,输出一行问题的编号( 开始编号,格式:case #0: 等),然后对应每个问题在一行中输出A+B的值。

样例
input
3
three four + five six =
zero seven + eight nine =
zero + zero =
output
case #0:
90
case #1:
96
case #2:
0

提示
数字 0-9 的英文单词为:

zero,one,two,three,four,five,six,seven,eight,nine

思路

字符串处理,这里用的String类,先用split分割一下字符串,存到sp数组里面,之后处理数字。
用了一个数组专门存数字的英文,遍历时找到对比即可。由于最多两位,所以若为两位,第一位要乘10.
发现加号,就转为处理数字2,等号不作处理,最后按格式输出即可。
这里的小问题是,next不接受空格,要用nextline,并且用之前要把之前的换行符给消去,空用一次nextline。

代码

  
  static String[] num = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight",
      "nine"};

  public static void fun() {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    String temp = sc.nextLine();
    for (int count = 0; count < n; count++) {
      String str = sc.nextLine();
      String[] sp = str.split(" ");
      int flag = 0;
      int add1 = 0, add2 = 0;
      for (int i = 0; i < sp.length; i++) {
        if (sp[i].equals("+")) {
          flag = 1;
          continue;
        }
        if (flag == 0) {
          for (int j = 0; j < 10; j++) {
            if (sp[i].equals(num[j])) {
              add1 *= 10;
              add1 += j;
              break;
            }
          }
        } else {
          for (int j = 0; j < 10; j++) {
            if (sp[i].equals(num[j])) {
              add2 *= 10;
              add2 += j;
              break;
            }
          }
        }
      }
      System.out.println("case #" + count + ":");
      System.out.println(add1 + add2);
    }
  }
posted @ 2021-01-13 17:11  cheng102e  阅读(69)  评论(0编辑  收藏  举报