• 宇姐的英语小本


    Description

    宇姐是个爱学习的好孩纸,尤其喜欢英歌历史,但是对于数字的英文单词,他总是傻傻分不清,于是他把一些常用或者典型的单词都按照自己喜欢的方式整理到了自己的小本本上。有天,珲姐发现了这个秘密,想借他的本本学习一下这些单词,却发现看不懂这些单词都表示数字几,你能帮帮他吗? 注意:所表示的数字-999,999,999≤N≤999,999,999。宇姐的本本上可能有:negative,zero,one,two,three,four,five,six,seven,eight,nine,ten,eleven,twelve,thirteen,fourteen,fifteen,sixteen,seventeen,eighteen,nineteen,twenty,thirty,forty,fifty,sixty,seventy,eighty,ninety,hundred,thousand,million。

    Input

    输入一行英文,即宇姐本本上的需要你翻译的部分。 请注意: 1.负数前面有词negative; 2.当能用thousand的时候,将不用hundred。例如:1500将写为“one thousand five hundred”,而不是“fifteen hundred”。

    Output

    输出单行结果,输出对应的值。

    Sample Input

    negative seven hundred twenty nine
    one million one hundred one
    eight hundred fourteen thousand twenty two

    Sample Output

    -729
    1000101
    814022



    解题思路:这道题很有趣,英文代表的数字转换成阿拉伯数字,不怕麻烦的话可以使用一大堆if来判读,但是我们不可能使用这么low的方法,其实可以将
    英文单词存进数组之中,就先之前做过的键盘题一样将每一个得到的单词和数组中的单词一一比对。另外,我们会发现hundred,thousand,million,这些
    单词的存在有着特殊的意义,它们可以看成是一个标志,可以用来和它们之前的数字组成数,最终统计到最后得到的数中。

    上代码:
     1 #include<stdio.h>
     2 #include<string.h>
     3 int main()
     4 {
     5     char a[32][50]= {"zero","one","two","three","four","five","six","seven",
     6                      "eight","nine","ten","eleven","twelve","thirteen","fourteen",
     7                      "fifteen","sixteen","seventeen","eighteen","nineteen",
     8                      "twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety","hundred",
     9                      "thousand","million","negative"
    10                     };
    11     int  len1,k,j,i,flag=1,sum,acc,z;
    12     char s[1000],x[110][110];
    13     gets(s);
    14     len1=strlen(s);
    15     k=0,j=0;
    16     sum=0;
    17     acc=0;
    18     for(i=0; i<=len1; i++) ///拆数
    19     {
    20         if(s[i]!=' '&&s[i]!='')
    21         {
    22             x[j][k++]=s[i];
    23         }
    24         else if((s[i]==' '&&s[i+1]!= ' ')||(s[i]==''))
    25         {
    26             x[j][k]='';
    27             j++;
    28             k=0;
    29         }
    30     }
    31     for(z=0; z<j; z++)
    32     {
    33         for(i=0; i<32; i++)
    34         {
    35             if(strcmp(x[z],a[i])==0)
    36                 break;
    37         }
    38          if(i<=20)
    39         {
    40             acc=acc+i;
    41         }
    42         else if(i>20&&i<=27)
    43         {
    44             acc=acc+(i-18)*10;
    45         }
    46         else if(i==28)
    47         {
    48             acc=acc*100;
    49         }
    50         else if(i==29)
    51         {
    52             sum=sum+acc*1000;
    53             acc=0;
    54         }
    55         else if(i==30)
    56         {
    57             sum=sum+acc*1000000;
    58             acc=0;
    59         }
    60         else if(i==31)
    61         {
    62             flag=-1;
    63         }
    64     }
    65     printf("%d
    ",(sum+acc)*flag);
    66     return 0;
    67 }
    
    
    
    
    
  • 相关阅读:
    javaweb 最简单的分页技术
    Jquery选择器小结
    JSON 初探
    C# GridView 的使用
    C# 操作数据库
    Java中String为什么是不可变
    Eclipse使用技巧小结
    Java File类方法使用详解
    JSP基础语法总结
    JSP取得绝对路径
  • 原文地址:https://www.cnblogs.com/wkfvawl/p/8877523.html
Copyright © 2020-2023  润新知