VerySource

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

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

  [复制链接]

1

主题

4

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-6-28 13:15:01 | 显示全部楼层
既然这样在上面的程序初始化时加一句
    s = s.replaceFirst("^0+","");
去掉前面的0即可
回复

使用道具 举报

0

主题

4

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-6-29 16:15:02 | 显示全部楼层
我以前用BASIC编的。但受限制于解释环境,输入数字不能>=10亿。但换个环境可以继续扩容。

10 DATA "零","壹","贰","叁","肆","伍","陆","柒","捌","玖"
20 DIM NUM$(10)
30 FOR I=0  TO 9
40 READ A$
50 NUM$(I)=A$
60 NEXT
70 DIM UNIT$(4)
80 UNIT$(1)="仟":UNIT$(2)="佰":UNIT$(3)="拾"
90 DIM SC$(3)
100 SC$(1)="亿":SC$(2)="万"
105 LOCATE 5,1:PRINT "不超过10亿";
110 LOCATE 1,1:INPUT "请输入一个阿拉伯数字(整)";N
120 IF INT(N)<>N  THEN PRINT "请输入整数":GOTO 110
125 IF N=0  THEN PRINT "零":END
130 N$=STR$(N):L=LEN(N$)
140 IF (L/4)=INT(L/4) THEN H=(L/4):GOTO 160
150 IF (L/4)>1  THEN H=INT(L/4)+1  ELSE H=1
160 DIM T$(3,4)
170 X=3:Y=4
180 FOR I=L  TO 1  STEP -1
190 T$(X,Y)=MID$(N$,I,1)
200 Y=Y-1
210 IF Y=0  THEN Y=4:X=X-1
220 NEXT
300 SH=4-H
310 FOR A=SH  TO 3
320 T=VAL(T$(A,1))
330 I=1
340 WHILE T=0
350 I=I+1
355 IF I=5 GOTO 470
360 T=VAL(T$(A,I))
370 LW=1
380 WEND
390 IF A<>SH  AND H>1  AND LW=1  THEN S$="零"
410 FOR J=I  TO 4
420 T=VAL(T$(A,J))
425 IF T=0  AND VAL(T$(A,J-1))=0  THEN GOTO 440
430 S$=S$+NUM$(T)+UNIT$(J*(T<>0))
440 NEXT
445 IF ?S$,3)<>"零" GOTO 460
450 S$=LEFT$(S$,(LEN(S$)-3)):WL=1
460 FN$=FN$+S$+SC$(A)
465 LW=0:S$=""
470 NEXT
480 PRINT FN$
回复

使用道具 举报

0

主题

4

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-6-29 17:15:01 | 显示全部楼层
谁有文曲星的话可以将上述代码转成BAS,传入文曲星。可以运行一下。
回复

使用道具 举报

0

主题

4

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-6-29 18:30:01 | 显示全部楼层
445 IF RIGHT$(S$,3)<>"零" GOTO 460
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-7-6 22:45:02 | 显示全部楼层
我也写了一个,个人以为位数太多也没什么意义,就做了15位的。
      另:我GOOGLE了一下,有说一兆=一万亿的,也有说一兆=一千一千亿的,我这里暂以为一兆=一万亿。代码如下:有不妥之处还请各位指正!

     package numberToCn;

import java.util.ArrayList;
import java.util.List;
import java.io.*;

public class NumberToCnModify {
        List cnList = null,danweiList = null;
        StringBuffer cnStr = null;
        char[] tempStr = null;
        int charLength = 0;
       
   public NumberToCnModify(){
           cnList = new ArrayList();
           danweiList = new ArrayList();
           cnStr = new StringBuffer();
   }
   
   public void init(){
           cnList.add("零");
           cnList.add("壹");
           cnList.add("贰");
           cnList.add("叁");
           cnList.add("肆");
           cnList.add("伍");
           cnList.add("陆");
           cnList.add("柒");
           cnList.add("捌");
           cnList.add("玖");
          
           danweiList.add("");
           danweiList.add("拾");
           danweiList.add("佰");
           danweiList.add("仟");
           danweiList.add("万");
           danweiList.add("亿");
           danweiList.add("兆");
   }
   
   public boolean isNumber(char tempChar){
           boolean isNum = true;
           if((tempChar<'0')||(tempChar>'9')){
                   System.out.println();
                   System.out.println("Not Number"+tempChar);
                   isNum=false;
           }
           return isNum;
   }
   
   public void getInputString(String inputStr){
           tempStr = inputStr.toCharArray();
           charLength = tempStr.length;
           if(charLength>15){
                   System.out.println("The Number You Input Is Too Long!");
                   System.exit(0);
           }
   }
   
   public String convertToBaseCn(int startNum,int endNum,String danwei){
           int allZero = 0;
           int tempNum = 0;
           String tempString = "";
           for(int i=startNum;i<endNum;i++){
                   tempNum = Integer.parseInt(String.valueOf(tempStr[i]));
                   if(i==startNum&&tempNum==0||i==startNum+1&&tempNum==0&&Integer.parseInt(String.valueOf(tempStr[i-1]))==0||i==startNum+2&&tempNum==0&&Integer.parseInt(String.valueOf(tempStr[i-1]))==0&&Integer.parseInt(String.valueOf(tempStr[i-2]))==0||i==startNum+3&&tempNum==0&&Integer.parseInt(String.valueOf(tempStr[i-1]))==0&&Integer.parseInt(String.valueOf(tempStr[i-2]))==0&&Integer.parseInt(String.valueOf(tempStr[i-3]))==0){
                           if(i==startNum+3&&tempNum==0&&Integer.parseInt(String.valueOf(tempStr[i-1]))==0&&Integer.parseInt(String.valueOf(tempStr[i-2]))==0&&Integer.parseInt(String.valueOf(tempStr[i-3]))==0){
                                   allZero = 1;
                           }
                           //如果第一个是零或者1、2两个都是0或者1、2、3,1、2、3、4都是0的话,就不用打印零和相应的单位了。
                   }else{
                           if(i==endNum-1&&tempNum==0||i==endNum-2&&tempNum==0&&Integer.parseInt(String.valueOf(tempStr[i+1]))==0||i==endNum-3&&tempNum==0&&Integer.parseInt(String.valueOf(tempStr[i+1]))==0){
                                   //如果最后一个是0,某一个及其后面一个都是0的话,就不必打印0
                           }else{
                                   tempString+=cnList.get(tempNum).toString();                             
                           }
                          
                           if(tempNum!=0){//如果是0的话,就不用打印单位
                                   tempString+=danweiList.get(endNum-(i+1)).toString();
                           }
                          
                   }
           }
          
           if(allZero == 0){
                   tempString+=danwei;
           }
          
           return tempString;
   }
   
   public String convertToCn(){

           int notNumber = 0;
           int zeroRecord = 0;//当同时两个或多个位段都是0时,只要显示一个0
           String tempString = "";
          
        try{   
          
           for(int i=0;i<charLength;i++){
                   if(!isNumber(tempStr[i])){
                           notNumber = 1;
                           break;
                   }
           }
          
           if(notNumber == 1){
                   System.out.println("Please Input Number!");
                   return "";
           }else{
                    if(charLength>12){
                           tempString = convertToBaseCn(0,charLength-12,"兆");
                           if(tempString.equals("")){
                                   zeroRecord ++;
                           }else{
                                   zeroRecord = 0;
                           }
                           cnStr.append(tempString);
                           if(zeroRecord ==1 ){
                                   cnStr.append("零");
                           }
                          
                           tempString = convertToBaseCn(charLength-12,charLength-8,"亿");
                           if(tempString.equals("")){
                                   zeroRecord ++;
                           }else{
                                   zeroRecord = 0;
                           }
                           cnStr.append(tempString);
                           if(zeroRecord ==1 ){
                                   cnStr.append("零");
                           }
                          
                           tempString = convertToBaseCn(charLength-8,charLength-4,"万");
                           if(tempString.equals("")){
                                   zeroRecord ++;
                           }else{
                                   zeroRecord = 0;
                           }
                           cnStr.append(tempString);
                           if(zeroRecord ==1 ){
                                   cnStr.append("零");
                           }
                          
                           tempString=convertToBaseCn(charLength-4,charLength,"");
                           if(tempString.equals("")){
                                   zeroRecord ++;
                           }else{
                                   zeroRecord = 0;
                           }
                           cnStr.append(tempString);
                           if(zeroRecord ==1 ){
                                   cnStr.append("零");
                           }
                   }else if(charLength>8){
                           tempString=convertToBaseCn(0,charLength-8,"亿");
                           if(tempString.equals("")){
                                   zeroRecord ++;
                           }else{
                                   zeroRecord = 0;
                           }
                           cnStr.append(tempString);
                           if(zeroRecord ==1 ){
                                   cnStr.append("零");
                           }
                          
                           tempString=convertToBaseCn(charLength-8,charLength-4,"万");
                           if(tempString.equals("")){
                                   zeroRecord ++;
                           }else{
                                   zeroRecord = 0;
                           }
                           cnStr.append(tempString);
                           if(zeroRecord ==1 ){
                                   cnStr.append("零");
                           }
                          
                           tempString=convertToBaseCn(charLength-4,charLength,"");
                           if(tempString.equals("")){
                                   zeroRecord ++;
                           }else{
                                   zeroRecord = 0;
                           }
                           cnStr.append(tempString);
                           if(zeroRecord ==1 ){
                                   cnStr.append("零");
                           }
                   }else if(charLength>4){
                           tempString=convertToBaseCn(0,charLength-4,"万");
                           if(tempString.equals("")){
                                   zeroRecord ++;
                           }else{
                                   zeroRecord = 0;
                           }
                           cnStr.append(tempString);
                           if(zeroRecord ==1 ){
                                   cnStr.append("零");
                           }
                          
                           tempString=convertToBaseCn(charLength-4,charLength,"");
                           if(tempString.equals("")){
                                   zeroRecord ++;
                           }else{
                                   zeroRecord = 0;
                           }
                           cnStr.append(tempString);
                           if(zeroRecord ==1 ){
                                   cnStr.append("零");
                           }
                   }else{
                       tempString=convertToBaseCn(0,charLength,"");
                       if(tempString.equals("")){
                                   zeroRecord ++;
                           }else{
                                   zeroRecord = 0;
                           }
                           cnStr.append(tempString);
                           if(zeroRecord ==1 ){
                                   cnStr.append("零");
                           }
           }
           }
        }catch(NullPointerException ne){
                System.out.println("NullPointerException:"+ne.getMessage());
        }catch(IndexOutOfBoundsException iobe){
                System.out.println("IndexOutOfBoundsException:"+iobe.getMessage());
        }finally{
               
        }
           return cnStr.toString();
   }
   
   public static void main(String[] args){
           NumberToCnModify ntc = new NumberToCnModify();
           ntc.init();
           ntc.getInputString("300340000000130");
           System.out.println(ntc.convertToCn());
   }
}
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-7-7 18:30:01 | 显示全部楼层
向各位高手领教了!
回复

使用道具 举报

0

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-7-7 23:15:02 | 显示全部楼层
支持“000123423400000000000130”的


import java.math.BigInteger;
import java.util.Scanner;

public class NumToChinese {

        public static void ToChinese(BigInteger 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)                // 添加单位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)
                {
                        BigInteger num = in.nextBigInteger();
                        if(num.equals(0))
                        {
                                System.exit(0);
                        }
                        ToChinese(num);
                }
        }
}
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-7-12 09:30:01 | 显示全部楼层
mark,以前用C++写过一个数字转英文大写的,不知有帮助没,代码如下:

//EnglishNumber.h

#pragma once
#include<string>
#include<cassert>
#include "ValueTraits.h"

using namespace std;

class EnglishNumber
{
public:
    EnglishNumber(){}
    ~EnglishNumber(){}
    template<typename ValueType>
        const string NumberName(const ValueType &) const;
private:
    template<typename ValueType>
        const string BaseDigit(const ValueType &) const;
    template<typename ValueType>
        const string TensDigit(const ValueType &) const;
    template<typename ValueType>
        const string HundredsDigit(const ValueType &) const;
    template<typename ValueType>
        const string MoreDigit(const ValueType &) const;
};

template<typename ValueType>
    const string EnglishNumber::BaseDigit(const ValueType & iNumber) const{
        const static string BaseNumName[] = {"zero",
            "one","two","three","four","five","six",
            "seven","eight","nine","ten","eleven",
            "twelve","thirteen","fourteen","fifteen",
            "sixteen","seventeen","eighteen","nineteen"};
        assert(iNumber >= 0 && iNumber < 20 && "Function BaseNumber");
        return BaseNumName[ValueTraits<ValueType>::Long(iNumber)];
    }

template<typename ValueType>
    const string EnglishNumber::TensDigit(const ValueType & iNumber) const{
        const static string TensDigitName[] = {
            "twenty","thirty","forty","fifty",
            "sixty","seventy","eighty","ninety"};
        assert(iNumber >= 0 && iNumber < 100 && "Function TensDigit");
        if(iNumber < 20)
            return BaseDigit(iNumber);
        ValueType h(iNumber),l(iNumber);
        h = iNumber / 10;
        l = iNumber % 10;
        if(0 == l)
            return TensDigitName[ValueTraits<ValueType>::Long(h) - 2];
        return TensDigitName[ValueTraits<ValueType>::Long(h) - 2] + "-" + BaseDigit(l);
    }

template<typename ValueType>
    const string EnglishNumber::HundredsDigit(const ValueType & iNumber) const{
        assert(iNumber >= 0 && iNumber < 1000 && "Function HundredsDigit");
        if(iNumber < 100)
            return TensDigit(iNumber);
        ValueType h,l;
        h = iNumber / 100;
        l = iNumber % 100;
        if(0 == l)
            return BaseDigit(h) + " hundred";
        return BaseDigit(h) + " hundred and " + TensDigit(l);
    }

template<typename ValueType>
    const string EnglishNumber::MoreDigit(const ValueType & iNumber) const{
        const static string MoreName[] = {"thousand","million","billion"};
        assert(iNumber >= 0 && "Function MoreNumber");
        if(iNumber < 1000)
            return HundredsDigit(iNumber);
        ValueType n;
        n = iNumber % 1000;
        string result;
        if(0 != n)
            result = HundredsDigit(n);
        n = iNumber / 1000;
        int i = 0;
        do{
            ValueType l = n % 1000;
            n /= 1000;
            if(0 != l)
                if(0 == result.size())
                    result = HundredsDigit(l) + " " + MoreName[i];
                else
                    result = HundredsDigit(l) + " " + MoreName[i] + ", " + result;
        }while(n > 0 && ++i < 3);
        if(n > 0)
            if(0 == result.size())
                result = MoreDigit(n) + " trillion";
            else
                result = MoreDigit(n) + " trillion, " + result;
        return result;
    }

template<typename ValueType>
    const string EnglishNumber::NumberName(const ValueType & iNumber) const{
        if(iNumber < 0)
            return "minus " + MoreDigit(-iNumber);
        return MoreDigit(iNumber);
    }

//ValueTraits.h

#pragma once

template<typename T>struct ValueTraits
{
        static long Long(const T & v)
        {
                return v;
        }
};
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-7-17 03:15:01 | 显示全部楼层
这个要是数字太多,后面怎么算啊?我觉得应该是先定单位;如万千百十万千百十亿千百十万千百十个,然后将字符串的每一位往进去插
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-7-18 08:00:01 | 显示全部楼层
好多算法,好多牛.....
回复

使用道具 举报

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

本版积分规则

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

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