输入一串数字,输出其中文读法

我15年面试的一道题目,当时却花了不少时间。题目如下:

输入一串数字(12位以内整数),然后输出其中文读法,如:
输入0,输出零;
输入100,输出一百;
输入101000,输出一十万一千;
输入100100,输出一十万零一百;
输入100010001000,输出一千亿一千万一千;
输入100100100100,输出一千零一亿零一十万零一百;
输入101010101010,输出一千零一十亿一千零一十万一千零一十;

用C语言实现,代码如下:

#include <stdio.h>
#include <string.h>

int main()
{
int i,j,cnt2; //定义变量
int cnt; //定义数字长度
char num[12]; //定义输入的数组
char hz[][9] = {"零","一","二","三","四","五","六","七","八","九"}; //数字的中文读法
char dw[][12] = {" ","十","百","千","万","十","百","千","亿","十","百","千"}; //数字的单位,此数字与变量j有关系

while(1){
    i = 0;
    
    gets(num);      
    cnt = strlen(num);      //统计数字的长度 
    cnt2 = cnt;      
     
    j = cnt2 - 1;       // 通过这个式子可以确定首位数的单位(单位是dw[j]),然后cnt--依次求出后一位数的单位 
    
    while(cnt2 > 0){
        if((num[i]-'0') != 0){      //num[i]-'0' 这个式子提出存在数组里的int ,判断此数是否为零 
            printf("%s%s",hz[num[i]-'0'],dw[j]);        //只要不是零,输出其中文和对应的单位 
        }
        else if((num[i]-'0') == 0){     //若此位上数字为零 
            if(cnt == 1)        //若num长度为一 
            printf("%s",hz[0]);     //输出'零' 
            else if(j != 0){    //若不为个位 
                if(j == 8)      //若是亿位 
                printf("%s",dw[j]);     //输出'亿'     
                else if(j == 4 ){       //若是万位 
                    if(cnt > 8){        //num长度大于8 
                        if((num[(cnt-8)]-'0') == 0 && (num[(cnt-7)]-'0') == 0 && (num[(cnt-6)]-'0') == 0){      //若十万百万千万皆为零 
                            if((num[i+1]-'0') != 0)
                            printf("%s",hz[0]);     //若后一位数不为零则输出'零' 
                        }       
                        else
                        printf("%s",dw[j]);     //输出'万'                         
                    }
                    else
                    printf("%s",dw[j]);     //输出'万'                     
                }
                else if((num[i+1]-'0') != 0)        //若不为个位且不为万位且不为亿位,则判断后一位数是否为零 
                printf("%s",hz[0]);     //若后一位数不为零则输出'零'                    
            }
        }
        cnt2--;     //cnt2自减使得循环能在cnt2>0条件下跳出 
        i++;        //遍历num数组 
        j--;        
    }   
    printf("\n"); 
}
return 0;

}

用JAVA实现,代码如下:

import java.util.Scanner;

public class test {

public static  void main(String[] args) {

    Scanner s = new Scanner(System.in);

    while (1 == 1)
    {
        String hz = "零一二三四五六七八九";
        String dw = "  十百千万十百千亿十百千";
        String num = null;
        num = s.next();
        int cnt;
        int j;
        int i;
        int sjsz;       //字符串num里第i位实际数字

        cnt = num.length();

        j = cnt;
        for (i = 0; i < cnt; i++)
        {
            sjsz = (num.charAt(i) - '0');
            if ( sjsz != 0 )     //若此位上数不为零
            {
                System.out.print(hz.charAt(sjsz));      //输出中文和对应单位
                System.out.print(dw.charAt(j));
            }
            else if ( j == 1 )        //若是个位
            {
                if ( cnt < 2 )
                {
                    System.out.print(hz.charAt(sjsz));
                }
            }
            else if ( j == 9 )        //若是亿位
            {
                System.out.print(dw.charAt(j));
            }
            else if ( j == 5 )        //若是万位
            {
                if ( cnt > 8 )
                {
                    if ( (num.charAt(cnt-8)-'0') == 0 && (num.charAt(cnt-7)-'0') == 0 && (num.charAt(cnt-6)-'0') == 0 )
                    {
                        if ( (num.charAt(i+1)-'0') != 0 )
                        {
                            System.out.print(hz.charAt(sjsz));      //输出零
                        }
                    }
                    else
                    {
                        System.out.print(dw.charAt(j));     //输出万
                    }
                }
                else
                {
                    System.out.print(dw.charAt(j));         //输出万
                }
            }
            else if ( (num.charAt(i+1)-'0') != 0 )
            {
                System.out.print(hz.charAt(sjsz));
            }
            j--;
        }
        System.out.println();
    }
}

}

标签: Java, C语言
返回文章列表 文章二维码
本页链接的二维码
打赏二维码
Title - Artist
0:00