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 }
  • 相关阅读:
    加密算法
    git 误操作
    element项目发布
    node命令
    计划
    第一次碰见类似留几手的段子手
    【vue】---猫眼项目中使用js组件的时候-------loading 加载 无法移除的原因---------
    【异步】---异步解决方案---
    【问题-方法】---buffer---解决方法,butter 文件转字符串
    【大脑】--如何让大脑快速记忆
  • 原文地址:https://www.cnblogs.com/acgoto/p/8468576.html
Copyright © 2011-2022 走看看