• UVa 486 English-Number Translator


    English-Number Translator 

    In this problem, you will be given one or more integers in English. Your task is to translate these numbers into their integer representation. The numbers can range from negative 999,999,999 to positive 999,999,999. The following is an exhaustive list of English words that your program must account for:

    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 and Output

    Notes on input:

    1. Negative numbers will be preceded by the word negative.
    2. The word ``hundred'' is not used when ``thousand'' could be. For example, 1500 is written ``one thousand five hundred'', not ``fifteen hundred''.

     

    The answers are expected to be on separate lines with a newline after each.

     

    Sample Input

     

    six
    negative seven hundred twenty nine
    one million one hundred one

     

    Sample Output

     

    6
    -729
    1000101

    与POJ 2121相同,分析见: http://www.cnblogs.com/lzj-0218/p/3222610.html

      1 #include<stdio.h>
      2 #include<string.h>
      3 
      4 int million_pos,thousand_pos,million,thousand,one;
      5 char s[10000],word[100][20];
      6 
      7 int find_num(int x,int y)
      8 {
      9     int i,ans=0,hundred_pos=-1;
     10 
     11     for(i=x;i<=y;i++)
     12         if(!strcmp(word[i],"hundred"))
     13         {
     14             hundred_pos=i;
     15             break;
     16         }
     17 
     18     if(hundred_pos==-1)
     19     {
     20         for(i=x;i<=y;i++)
     21             if(!strcmp(word[i],"one"))
     22                 ans+=1;
     23             else if(!strcmp(word[i],"two"))
     24                 ans+=2;
     25             else if(!strcmp(word[i],"three"))
     26                 ans+=3;
     27             else if(!strcmp(word[i],"four"))
     28                 ans+=4;
     29             else if(!strcmp(word[i],"five"))
     30                 ans+=5;
     31             else if(!strcmp(word[i],"six"))
     32                 ans+=6;
     33             else if(!strcmp(word[i],"seven"))
     34                 ans+=7;
     35             else if(!strcmp(word[i],"eight"))
     36                 ans+=8;
     37             else if(!strcmp(word[i],"nine"))
     38                 ans+=9;
     39             else if(!strcmp(word[i],"ten"))
     40                 ans+=10;
     41             else if(!strcmp(word[i],"eleven"))
     42                 ans+=11;
     43             else if(!strcmp(word[i],"twelve"))
     44                 ans+=12;
     45             else if(!strcmp(word[i],"thirteen"))
     46                 ans+=13;
     47             else if(!strcmp(word[i],"fourteen"))
     48                 ans+=14;
     49             else if(!strcmp(word[i],"fifteen"))
     50                 ans+=15;
     51             else if(!strcmp(word[i],"sixteen"))
     52                 ans+=16;
     53             else if(!strcmp(word[i],"seventeen"))
     54                 ans+=17;
     55             else if(!strcmp(word[i],"eighteen"))
     56                 ans+=18;
     57             else if(!strcmp(word[i],"nineteen"))
     58                 ans+=19;
     59             else if(!strcmp(word[i],"twenty"))
     60                 ans+=20;
     61             else if(!strcmp(word[i],"thirty"))
     62                 ans+=30;
     63             else if(!strcmp(word[i],"forty"))
     64                 ans+=40;
     65             else if(!strcmp(word[i],"fifty"))
     66                 ans+=50;
     67             else if(!strcmp(word[i],"sixty"))
     68                 ans+=60;
     69             else if(!strcmp(word[i],"seventy"))
     70                 ans+=70;
     71             else if(!strcmp(word[i],"eighty"))
     72                 ans+=80;
     73             else if(!strcmp(word[i],"ninety"))
     74                 ans+=90;
     75     }
     76     else
     77     {
     78         for(i=x;i<hundred_pos;i++)
     79             if(!strcmp(word[i],"one"))
     80                 ans+=100;
     81             else if(!strcmp(word[i],"two"))
     82                 ans+=200;
     83             else if(!strcmp(word[i],"three"))
     84                 ans+=300;
     85             else if(!strcmp(word[i],"four"))
     86                 ans+=400;
     87             else if(!strcmp(word[i],"five"))
     88                 ans+=500;
     89             else if(!strcmp(word[i],"six"))
     90                 ans+=600;
     91             else if(!strcmp(word[i],"seven"))
     92                 ans+=700;
     93             else if(!strcmp(word[i],"eight"))
     94                 ans+=800;
     95             else if(!strcmp(word[i],"nine"))
     96                 ans+=900;
     97         for(i=hundred_pos+1;i<=y;i++)
     98             if(!strcmp(word[i],"one"))
     99                 ans+=1;
    100             else if(!strcmp(word[i],"two"))
    101                 ans+=2;
    102             else if(!strcmp(word[i],"three"))
    103                 ans+=3;
    104             else if(!strcmp(word[i],"four"))
    105                 ans+=4;
    106             else if(!strcmp(word[i],"five"))
    107                 ans+=5;
    108             else if(!strcmp(word[i],"six"))
    109                 ans+=6;
    110             else if(!strcmp(word[i],"seven"))
    111                 ans+=7;
    112             else if(!strcmp(word[i],"eight"))
    113                 ans+=8;
    114             else if(!strcmp(word[i],"nine"))
    115                 ans+=9;
    116             else if(!strcmp(word[i],"ten"))
    117                 ans+=10;
    118             else if(!strcmp(word[i],"eleven"))
    119                 ans+=11;
    120             else if(!strcmp(word[i],"twelve"))
    121                 ans+=12;
    122             else if(!strcmp(word[i],"thirteen"))
    123                 ans+=13;
    124             else if(!strcmp(word[i],"fourteen"))
    125                 ans+=14;
    126             else if(!strcmp(word[i],"fifteen"))
    127                 ans+=15;
    128             else if(!strcmp(word[i],"sixteen"))
    129                 ans+=16;
    130             else if(!strcmp(word[i],"seventeen"))
    131                 ans+=17;
    132             else if(!strcmp(word[i],"eighteen"))
    133                 ans+=18;
    134             else if(!strcmp(word[i],"nineteen"))
    135                 ans+=19;
    136             else if(!strcmp(word[i],"twenty"))
    137                 ans+=20;
    138             else if(!strcmp(word[i],"thirty"))
    139                 ans+=30;
    140             else if(!strcmp(word[i],"forty"))
    141                 ans+=40;
    142             else if(!strcmp(word[i],"fifty"))
    143                 ans+=50;
    144             else if(!strcmp(word[i],"sixty"))
    145                 ans+=60;
    146             else if(!strcmp(word[i],"seventy"))
    147                 ans+=70;
    148             else if(!strcmp(word[i],"eighty"))
    149                 ans+=80;
    150             else if(!strcmp(word[i],"ninety"))
    151                 ans+=90;
    152     }
    153 
    154     return ans;
    155 }
    156 
    157 int main()
    158 {
    159     int i,t;
    160 
    161     while(gets(s))
    162     {
    163         if(s[0]=='')
    164             break;
    165 
    166         t=0;
    167         for(i=0;s[i]!='';i+=strlen(word[t-1]))
    168             sscanf(&s[i],"%s",word[t++]);
    169 
    170         million_pos=thousand_pos=-1;
    171         for(i=0;i<t;i++)
    172             if(!strcmp(word[i],"million"))
    173                 million_pos=i;
    174             else if(!strcmp(word[i],"thousand"))
    175                 thousand_pos=i;
    176 
    177         i=0;
    178         if(!strcmp(word[i],"negative"))
    179         {
    180             printf("-");
    181             i++;
    182         }
    183 
    184         if(million_pos==-1)
    185         {
    186             if(thousand_pos==-1)
    187                 printf("%d
    ",find_num(i,t-1));
    188             else
    189             {
    190                 printf("%d",find_num(i,thousand_pos-1));
    191                 printf("%03d
    ",find_num(thousand_pos+1,t-1));
    192             }
    193         }
    194         else
    195         {
    196             if(thousand_pos==-1)
    197             {
    198                 printf("%d",find_num(i,million_pos-1));
    199                 printf("000");
    200                 printf("%03d
    ",find_num(million_pos+1,t-1));
    201             }
    202             else
    203             {
    204                 printf("%d",find_num(i,million_pos-1));
    205                 printf("%03d",find_num(million_pos+1,thousand_pos-1));
    206                 printf("%03d
    ",find_num(thousand_pos+1,t-1));
    207             }
    208         }
    209     }
    210 
    211     return 0;
    212 }
    [C]
  • 相关阅读:
    linux源码方式安装Apache
    linux的chmod,chown命令详解
    2011年10月18日
    mysql检查查询及索引效率方法(explain)
    php中英文字符串的研究
    2011年10月20日
    PHP JSON中文乱码解决方法大全
    解决PHP下载文件名中文乱码
    php字符串学习笔记
    CSU_BMW正式组队纪念赛出题+部分解题报告
  • 原文地址:https://www.cnblogs.com/lzj-0218/p/3222625.html
Copyright © 2020-2023  润新知