zoukankan      html  css  js  c++  java
  • 题解报告:hdu 1228 A+B(字符串)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1228

    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

    题解思路:这道题本来想用gets函数,循环读进来的字符串,把每一个单词存到二维数组里面,再与已存在的二维数组进行比较。但看了别人的题解后才发现忘了scanf有这个功能即遇到空格、换行、回车、水平制表符、换页符、垂直制表符就会停止读取(这里用到的是空格的功能),不仅效率高,而且思路清晰,代码简洁。

    AC代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 char t[10][10]={"zero","one","two","three","four","five","six","seven","eight","nine"};//先用二维数组保存对应的数字
     4 int fd(char str[])//查找字符串
     5 {
     6     int i;
     7     for(i=0;i<10;i++)
     8         if(!strcmp(t[i],str))break;
     9     return i;//返回该字符串对应的数字
    10 }
    11 int main()
    12 {
    13 
    14     char c[10];
    15     int a,b;
    16     while(1){
    17         a=b=0;
    18         while(scanf("%s",c)&&strcmp(c,"+"))a=a*10+fd(c);//遇到'+'就会结束当前循环
    19         while(scanf("%s",c)&&strcmp(c,"="))b=b*10+fd(c);//遇到'='就会结束当前循环
    20         if(a==0&&b==0)break;//题目要求当A、B都为0时停止输入
    21         else cout<<(a+b)<<endl;//直接计算输出结果
    22     }
    23     return 0;
    24 }
  • 相关阅读:
    android 发短信
    如何判断一个Div是否可视区域,判断div是否可见
    java arrayCopy
    Java 正则表达式 向前、向后匹配
    postgres 正则表达式
    java 分析方法调用过程
    chrome 模拟点击
    Java获取NTP网络时间
    Android对话框与Activity共存时的异常
    Android代码混淆
  • 原文地址:https://www.cnblogs.com/acgoto/p/8468576.html
Copyright © 2011-2022 走看看