zoukankan      html  css  js  c++  java
  • 《牛客网》——华为机试在线训练——学英语

    1、学英语

    题目描述

    Jessi初学英语,为了快速读出一串数字,编写程序将数字转换成英文:

    如22:twenty two,123:one hundred and twenty three。

    说明:

    数字为正整数,长度不超过九位,不考虑小数,转化结果为英文小写;

    输出格式为twenty two;

    非法数据请返回“error”;

    关键字提示:and,billion,million,thousand,hundred。

    方法原型:public static String parse(long num) 

    输入描述:

    输入一个long型整数

    输出描述:

    输出相应的英文写法

    示例1

    输入

    复制
    2356

    输出

    复制
    two thousand three hundred and fifty six


    代码:
    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    
    int getNumLen(long lNum)
    {
        int nLen = 0;
        while(lNum / 10 >= 0)
        {
            lNum /= 10;
            nLen++;
        }
    
        return nLen;
    }
    
    #define MAX_SIZE 0x500
    
    std::string g_Output;
    
    
    
    void Trans1(int n)
    {
        switch(n)
        {
        case 1:
            g_Output += "one ";
            break;
        case 2:
            g_Output += "two ";
            break;
        case 3:
            g_Output += "three ";
            break;
        case 4:
            g_Output += "four ";
            break;
        case 5:
            g_Output += "five ";
            break;
        case 6:
            g_Output += "six ";
            break;
        case 7:
            g_Output += "seven ";
            break;
        case 8:
            g_Output += "eight ";
            break;
        case 9:
            g_Output += "nine ";
            break;
        }
    }
    
    void Trans2(int n)
    {
        switch(n)
        {
        case 0:
            g_Output += "ten ";
            break;
        case 1:
            g_Output += "eleven ";
            break;
        case 2:
            g_Output += "twelve ";
            break;
        case 3:
            g_Output += "threeteen ";
            break;
        case 4:
            g_Output += "fourteen ";
            break;
        case 5:
            g_Output += "fifteen ";
            break;
        case 6:
            g_Output += "sixteen ";
            break;
        case 7:
            g_Output += "seventeen ";
            break;
        case 8:
            g_Output += "eighteen ";
            break;
        case 9:
            g_Output += "nineteen ";
            break;
        }
    }
    
    
    void Trans3(int n)
    {
        switch(n)
        {
        case 2:
            g_Output += "twenty ";
            break;
        case 3:
            g_Output += "thirty ";
            break;
        case 4:
            g_Output += "forty ";
            break;
        case 5:
            g_Output += "fifty ";
            break;
        case 6:
            g_Output += "sixty ";
            break;
        case 7:
            g_Output += "seventy ";
            break;
        case 8:
            g_Output += "eighty ";
            break;
        case 9:
            g_Output += "ninety ";
            break;
        }
    }
    
    void Trans(int lHigh)
    {
        if(lHigh / 100 > 0)
        {
            Trans1(lHigh / 100);
            g_Output += "hundred ";
            lHigh %= 100;
            if(lHigh > 0)
            {
                g_Output += "and ";
            }
        }
    
        if(lHigh / 10 > 0)
        {
            if(lHigh / 10 == 1)
            {
                Trans2(lHigh % 10);
                return;
            }
    
            Trans3(lHigh / 10);
        }
    
        lHigh %= 10;
        if(lHigh)
        {
            Trans1(lHigh);
        }
    
        return;
    }
    
    int getLen(long lNum)
    {
        int nCunt = 0;
        while(lNum)
        {
            nCunt++;
            lNum /= 10;
        }
        return nCunt;
    }
    
    int main()
    {
        char szInput[MAX_SIZE] = {0};
        while(scanf("%s", szInput) != EOF)
        {
            if(strlen(szInput) > 9)
            {
                printf("error");
                return 0;
            }
    
            if(szInput[0] == '-')
            {
                printf("error");
                return 0;
            }
    
            if(std::string(szInput).find('.') != -1)
            {
                printf("error");
                return 0;
            }
    
            int nLen = strlen(szInput);
            long lNum = atol(szInput);
    
            if(0 == lNum)
            {
                printf("zero");
                return 0;
            }
    
            while(1)
            {
                int lHigh = 0;
                if(nLen >= 7)
                {
                    lHigh = lNum / 1000000;
                    Trans(lHigh);
                    lNum = lNum % 1000000;
                    g_Output += "million ";
                    nLen = getLen(lNum);
                }
                else if(nLen >= 4)
                {
                    lHigh = lNum / 1000;
                    Trans(lHigh);
                    lNum = lNum % 1000;
                    g_Output += "thousand ";
                    nLen = getLen(lNum);
                }
                else
                {
                    Trans((int)lNum);
                    break;
                }
            }
            memset(szInput, 0, MAX_SIZE);
            printf("%s
    ", g_Output.c_str());
            g_Output.clear();
        }
        
        //system("pause");
        return 0;
    }
  • 相关阅读:
    干货分享:QQ群排名霸屏优化规则靠前的新技术
    QQ群排名优化到霸屏的策略怎么做?
    百度知道芝麻将,申请资格&权限介绍&奖惩制度(简剖)
    新媒体运营之如此微信养号不易封
    知道引流于需求之上 势必更为精准有效
    价值内容争夺背后的流量推荐 以及利润分发逻辑
    深度剖析:自媒体爆文十大标题写法
    据统计:90%的爆文都这样敲出来滴
    短视频不为人知的素材来源 以及平台推荐的黑盒机制
    说什么月入几万 我是不是应该一头撞死?
  • 原文地址:https://www.cnblogs.com/predator-wang/p/11869168.html
Copyright © 2011-2022 走看看