VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 9453|回复: 82

一道java笔试题,以为很简单,结果半天都没写对!请大虾给出个正确解答

  [复制链接]

2

主题

6

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-2-2 08:00:02 | 显示全部楼层 |阅读模式
给一个阿拉伯数字
例如输入:123456789
输出:壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖

我以为这个功能很简单,但是发现如果数字中间出现多个0的情况,就要有问题

贴一下我的代码,比较差劲
    public static String daxie(int sum)
    {
        String [] n=new String[10];
        n[0]="零";
        n[1]="壹";
        n[2]="贰";
        n[3]="叁";
        n[4]="肆";
        n[5]="伍";
        n[6]="陆";
        n[7]="柒";
        n[8]="捌";
        n[9]="玖";
        String [] d=new String[10];
        d[0]="";
        d[1]="";
        d[2]="拾";
        d[3]="佰";
        d[4]="仟";
        d[5]="萬";
        d[6]="拾";
        d[7]="佰";
        d[8]="仟";
        d[9]="亿";
        //计算数字的位数
        int wei=(int)Math.floor
                (
                Math.log10((double)sum)
                )+1;
        System.out.println(wei);
        String str="";
        int digit=0;
        for (int i=wei;i>0;i--)
        {   
            digit=sum/
            (int)Math.pow(10.0, (double)(i-1));
            str+=n[digit].toString()+d[i].toString();            
            sum=sum%
            (int)Math.pow(10.0, (double)(i-1));
        }

        str= str.replace("拾零", "拾");
        str= str.replace("零拾", "零");
           str= str.replace("零佰", "零");
           str= str.replace("零仟", "零");
           str= str.replace("零萬", "萬");
          for (int i=1;i<=6;i++)
         str= str.replace("零零", "零");
         str=str.replace("零萬", "零");
         str=str.replace("零亿", "亿");   
         str= str.replace("零零", "零");
        if (str.endsWith("零"))
        {
            str=str.substring(0, str.length()-1);
        }
        System.out.println(str);
        return str;
    }
回复

使用道具 举报

0

主题

5

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-3-21 09:30:01 | 显示全部楼层
String [] d=new String[10];
d[0]="";
d[1]="";
d[2]="拾";
d[3]="佰";
d[4]="仟";
d[5]="萬";
d[6]="拾";
d[7]="佰";
d[8]="仟";
d[9]="亿";
你这个定义到第九位,那么如果数字有10位或者以上的话,取的时候就会越界了。
另外在万位的判断上,我觉得需要加个判断
if(wei < 5){
                str=str.replace("零萬", "零");
        }else{
                str=str.replace("零萬", "萬");
        }
回复

使用道具 举报

2

主题

6

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-3-22 20:00:01 | 显示全部楼层
cloudyangyan 我照你的方法改了,还是有问题
回复

使用道具 举报

0

主题

2

帖子

428.00

积分

荣誉会员

Rank: 10Rank: 10Rank: 10

积分
428.00
发表于 2020-3-23 23:54:31 | 显示全部楼层
daike1017 发表于 2020-3-22 20:00
cloudyangyan 我照你的方法改了,还是有问题

这种的吗?
li.png
回复

使用道具 举报

1

主题

20

帖子

15.00

积分

新手上路

Rank: 1

积分
15.00
发表于 2020-3-24 00:00:01 | 显示全部楼层
class Test
{
    public static void main(String[] args)
    {
        String num = "零壹贰叁肆伍陆柒捌玖";
        String dw = "圆拾佰仟万亿";
        String m = "35602001.23";
        String mm[] = null;
        mm = m.split("\\.");
        String money = mm[0];

        String result = num.charAt(Integer.parseInt("" + mm[1].charAt(0))) +
            "角" +
            num.charAt(Integer.parseInt("" + mm[1].charAt(1))) + "分";

        for (int i = 0; i < money.length(); i++)
        {
            String str = "";
            int n = Integer.parseInt(money.substring(money.length() - i - 1,
                money.length() - i));
            str = str + num.charAt(n);
            if (i == 0)
            {
                str = str + dw.charAt(i);
            }
            else if ( (i + 4) % 8 == 0)
            {
                str = str + dw.charAt(4);
            }
            else if (i % 8 == 0)
            {
                str = str + dw.charAt(5);
            }
            else
            {
                str = str + dw.charAt(i % 4);
            }
            result = str + result;
        }
        result = result.replaceAll("零万", "万");
        result = result.replaceAll("零([^圆]{1})", "零");
        result = result.replaceAll("零+", "零");
        result = result.replaceAll("零圆", "圆");
        result = result.replaceAll("零万", "万");
        System.out.println(result);

    }
}

粗略测试过,lz验证下,看是否有问题
回复

使用道具 举报

0

主题

9

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-3-24 18:30:01 | 显示全部楼层
public class Rectangle
{
    public static String daxie(int sum)
    {
        String [] n=new String[10];
        n[0]="";
        n[1]="壹";
        n[2]="贰";
        n[3]="叁";
        n[4]="肆";
        n[5]="伍";
        n[6]="陆";
        n[7]="柒";
        n[8]="捌";
        n[9]="玖";
        String [] d=new String[10];
        d[0]="";
        d[1]="拾";
        d[2]="佰";
        d[3]="仟";
        String [] e=new String[10];
        e[0]="萬";
        e[1]="亿";

        //计算数字的位数
//        int wei=(int)Math.floor
//                (
//                Math.log10((double)sum)
//                )+1;
        String old  = ""+sum;
        int wei= (old).length();
System.out.println("计算数字的位数=="+wei);
        
        ArrayList str = new ArrayList();
        int digit = 0;
        int digit1 = 0;
        for (int i=wei-1;i>=0;i--){
            if(!"0".equals("" + old.charAt(i))){
                str.add(0,d[digit]);
                str.add(0,n[Integer.parseInt("" + old.charAt(i))]);
                            }
                digit++;
                if(digit==4){
                    digit =0;
                    str.add(0,e[digit1]);
                    digit1++;
                }
        }
        System.out.println(str);
        return str.toString();
    }

    public static void main(String[] args)
    {
        System.out.println(daxie(100212334));
    }
}


计算数字的位数==9
[壹, , 亿, 贰, 拾, 壹, , 萬, 贰, 仟, 叁, 佰, 叁, 拾, 肆, ]
[壹, , 亿, 贰, 拾, 壹, , 萬, 贰, 仟, 叁, 佰, 叁, 拾, 肆, ]

自己看看可以不
回复

使用道具 举报

2

主题

6

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-3-25 18:45:01 | 显示全部楼层
meisei
你输入
10000004
试试

计算数字的位数==8
[亿, 壹, 仟, 萬, 肆, ]
不对啊
回复

使用道具 举报

0

主题

2

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-3-26 11:00:02 | 显示全部楼层
我测试了下, 找不到有错啊, 请指点下, 哪几个数字,会有问题的???
回复

使用道具 举报

0

主题

2

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-3-26 18:45:02 | 显示全部楼层
lz 的那个,
回复

使用道具 举报

2

主题

6

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-3-27 12:45:01 | 显示全部楼层
我是楼主
我的程序
输入:10000004

输出:壹仟零肆

应该是:壹仟萬零肆
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表