VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
楼主: daike1017

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

  [复制链接]

0

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-5-24 17:00:01 | 显示全部楼层
import java.util.Scanner;

public class NumToChinese {

        public static void ToChinese(Long num) {
                String n[] = {"零","壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};               
                String unit[] = { "",  "拾" , "佰","仟"};
                String unit1[] = { "亿", "万" };
                StringBuilder chi = new StringBuilder();

                for (int i = 0; i < num.toString().length(); i++) {
                        chi.append(n[Integer.parseInt(String.valueOf(num.toString().charAt(i)))]);
                        chi.append(unit[(num.toString().length()-i-1) % 4]);  
                        if ((num.toString().length()-i) % 4 == 1)  
                        {
                                chi.append(unit1[(int) Math.floor((double) (num.toString().length()-i) / 4) % 2]);
                        }
                }
                String ch = chi.toString();               
                ch = ch.replaceAll("零仟", "零");
                ch = ch.replaceAll("零佰", "零");
                ch = ch.replaceAll("零拾", "零");               
                while(ch.indexOf("零零")>0)
                {
                        ch = ch.replaceAll("零零", "零");
                }
                ch = ch.replaceAll("零万", "万");
                ch = ch.replaceAll("零亿", "亿");
                ch = ch.replaceAll("亿万", "亿");
                System.out.println(ch.substring(0, ch.length()-1));
        }

        public static void main(String[] args) {
                Scanner in = new Scanner(System.in);
                while(true)
                {
                        long num = in.nextLong();
                        if(num==0)
                        {
                                System.exit(0);
                        }
                        ToChinese(new Long(num));
                }
        }

}
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-5-27 20:30:01 | 显示全部楼层
public class GetNumber {
  public static void main(String[] args) {
  //从命令行取得数字
    int num = Integer.parseInt(args[0]);
    int num1=num;
    int n = 0;
    while(num1 >=10) {
            num1 = num1 / 10;
            n++;
    }
    int[] nums = new int[n+1];
    num1 = num;
    for (int i = 0; i < n+1;i++) {
            nums[i]= num1 % 10;
            num1 = num1 / 10;
    }
    String[] chNum={"壹","贰","叁","肆","伍","陆","柒","捌","玖","拾"};
    String[] unit={"","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟","万"};
    for (int i = n; i >=0;i--) {
            System.out.print(chNum[nums[i]-1]);
            System.out.print(unit[i]);
   }
}
}
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-5-31 10:15:01 | 显示全部楼层
这道题网上的标准答案不准确么?
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-6-7 15:45:01 | 显示全部楼层
见笑了。
if (str.indexOf("萬零") > 0)
            str = str.replace("零萬", "萬");
        else
            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("零零", "零");
        str = str.replace("亿萬", "亿");
        if (str.endsWith("零")) {
            str = str.substring(0, str.length() - 1);
        }
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-6-10 17:45:01 | 显示全部楼层
f (str.indexOf("萬零") > 0)
            str = str.replace("零萬", "萬");
        else
            str = str.replace("零萬", "零");
改成如下,再试试。
if (str.indexOf("萬零") > 0)
            str = str.replace("零萬", "萬");
        else{
            
            if(str.substring(0,str.indexOf("萬")).indexOf("零仟") == -1 || str.substring(0,str.indexOf("萬")).indexOf("零佰") == -1 || str.substring(0,str.indexOf("萬")).indexOf("零拾") == -1)
                str = str.replace("零萬", "萬");
            else
                str = str.replace("零萬", "零");
        }
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-6-15 20:45:02 | 显示全部楼层
你们的程序  输入5个以上的“0” 看看输出的是什么


如果解决这个问题  估计程序是没有什么问题了~

上面的程序好多都有这个问题
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-6-16 23:15:01 | 显示全部楼层
高手们你们好,如果输入多个0的时候就出问题了,比如000105这样的.
呵呵,谢谢你们的程序啊
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-6-20 02:30:01 | 显示全部楼层
很简单啊,先转成int去掉前面的0,再跟据每一位的位置算出其单位,0不加单位,连续多个0只算一个,好像没有有难度的地方啊,太简单,懒得写代码
回复

使用道具 举报

0

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-6-23 16:00:01 | 显示全部楼层
000123423400000000000130
能把这个正确的读出来就OK了。
回复

使用道具 举报

1

主题

4

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-6-28 02:15:01 | 显示全部楼层
如下:
public class test{
  int number[];
  String bignum[] = {"零","一","二","三","四","五","六","七","八","久"};
  String sign1[] = {"","十","百","千"};
  String sign2[] = {"圆","万","亿","兆"};
  test(String s){
    if(s.length()>sign2.length*4)
      System.exit(0);
    number = new int[s.length()];
    for(int i=0;i<s.length();i++)
      number[s.length()-1-i] = Integer.parseInt(i==s.length()-1?s.substring(i):s.substring(i,i+1));
    run();
  }
  void run(){
    String s="";
    for(int i=number.length-1;i>=0;i--){
      s+=bignum[number[i]];
      s+=i%4==0?sign2[i/4]:number[i]>0?sign1[i%4]:"";
    }
    while(s.indexOf("零零")!=-1)
      s=s.replaceFirst("零零","零");
    for(int i=0;i<sign1.length;i++)
      while(s.indexOf("零"+sign2[i])!=-1)
        s=s.replaceFirst("零"+sign2[i],sign2[i]);
    for(int i=sign2.length-1;i>0;i--)
      while(s.indexOf(sign2[i]+sign2[i-1])!=-1)
        s=s.replaceFirst(sign2[i]+sign2[i-1],sign2[i]);
    System.out.println(s);
  }
  public static void main(String args[]){
    new test(args[0]);
  }
}
回复

使用道具 举报

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

本版积分规则

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

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