zoukankan      html  css  js  c++  java
  • 宇姐的英语小本

    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 }
    
    
    
    
    
  • 相关阅读:
    [LeetCode] Valid Palindrome
    [LeetCode] Word Ladder II(bfs、dfs)
    [LeetCode] Word Ladder
    [LeetCode] Longest Consecutive Sequence(DP)
    [LeetCode] Binary Tree Maximum Path Sum(递归)
    [LeetCode] Search in Rotated Sorted Array II
    hadoop streaming map输入文件路径获取
    LeetCode 4. 寻找两个正序数组的中位数
    剑指 Offer 56
    LeetCode 260.只出现一次的数字 III
  • 原文地址:https://www.cnblogs.com/wkfvawl/p/8877523.html
Copyright © 2011-2022 走看看