上机题整理.docx
- 文档编号:29410099
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:70
- 大小:51.81KB
上机题整理.docx
《上机题整理.docx》由会员分享,可在线阅读,更多相关《上机题整理.docx(70页珍藏版)》请在冰豆网上搜索。
上机题整理
Java
基础
1.用循环控制语句打印输出:
1+3+5+…….+99=?
结果。
publicvoidprint(intn){
intsum=0;
for(inti=1;i sum=sum+i; } System.out.println("1+3+5+...+"+n+"="+sum); } 2.金额转换,阿拉伯数字的金额转换成 packagecom.work.util; /** *@authorwangmj *编写时间: 2005-8-2 *优化: 2008-07-03 *类的名称为: RMB.java *比较完善的解决方案。 测试通过。 *最准确的使用就是小数点之前最多13位,小数点之后不限,当然写多了也没有用,哈哈。 */ importjava.text.DecimalFormat; importjava.text.NumberFormat; //总体思路: //对数字进行分级处理,级长为4 //对分级后的每级分别处理,处理后得到字符串相连 //如: 123456=12|3456 //第二级: 12=壹拾贰+“万” //第一级: 3456=叁千肆百伍拾陆+“” publicfinalclassRMB{ privatedoubleamount=0.0D; privatestaticfinalStringNUM="零壹贰叁肆伍陆柒捌玖"; privatestaticfinalStringUNIT="仟佰拾个"; privatestaticfinalStringGRADEUNIT="仟万亿兆"; privatestaticfinalStringDOTUNIT="角分厘"; privatestaticfinalintGRADE=4; privatestaticfinalStringSIGN="¥"; privatestaticfinalNumberFormatnf=newDecimalFormat("#0.###"); /** *带参数的构造方法 * *@paramamount */ privateRMB(doubleamount){ this.amount=amount; } publicstaticStringtoBigAmt(doubleamount){ nf.setMinimumFractionDigits(3);//小数点后不足的补零 Stringamt=nf.format(amount);//将double类型的数格式化并转换成字符串,实际上进行了四舍五入 System.out.println(amt); Doubled=newDouble(amount); StringdotPart="";//取小数位 StringintPart="";//取整数位 intdotPos; if((dotPos=amt.indexOf('.'))! =-1){ intPart=amt.substring(0,dotPos); dotPart=amt.substring(dotPos+1); if(dotPart.length()>4){//超过4位直接截取 dotPart=dotPart.substring(0,4); } }else{ intPart=amt; } if(intPart.length()>16){ thrownewjava.lang.InternalError("数额太大,无法转换。 "); } StringintBig=intToBig(intPart); StringdotBig=dotToBig(dotPart); //以下代码稍做修改,现在好多了。 if((dotBig.length()==0)&&(intBig.length()! =0)){ returnintBig+"元整"; }elseif((dotBig.length()==0)&&(intBig.length()==0)){ returnintBig+"零元"; }elseif((dotBig.length()! =0)&&(intBig.length()! =0)){ returnintBig+"元"+dotBig; }else{ returndotBig; } } /** *用来处理几角几分几厘 *@paramdotPart *@return */ privatestaticStringdotToBig(StringdotPart){ //得到转换后的大写(小数部分) StringstrRet=""; for(inti=0;i intnum; if((num=Integer.parseInt(dotPart.substring(i,i+1)))! =0) strRet+=NUM.substring(num,num+1) +DOTUNIT.substring(i,i+1); } returnstrRet; } /** *用来处理多少元,这个要仔细考虑才行 *@paramintPart *@return */ privatestaticStringintToBig(StringintPart){ //得到转换后的大写(整数部分) intgrade;//级长 Stringresult=""; StringstrTmp=""; //得到当级长 grade=intPart.length()/GRADE; //调整级次长度 if(intPart.length()%GRADE! =0){ grade+=1; } //对每级数字处理,先处理最高级,然后再处理低级的 for(inti=grade;i>=1;i--){ strTmp=getNowGradeVal(intPart,i);//取得当前级次数字 result+=getSubUnit(strTmp);//转换大写 //System.out.println(strTmp+"|"+getSubUnit(strTmp)); result=dropZero(result);//除零去掉连续的零 //System.out.println("result="+result); //加级次单位 if(i>1)//末位不加单位 //单位不能相连续 //注意: 连续4个零的时候要特殊处理(wmj修改此bug) if(getSubUnit(strTmp).equals("零零零零")){ result=result+"零"; }else{ result+=GRADEUNIT.substring(i-1,i); } } returnresult; } privatestaticStringgetNowGradeVal(StringstrVal,intgrade){ //得到当前级次的串 Stringrst; if(strVal.length()<=grade*GRADE){ rst=strVal.substring(0,strVal.length()-(grade-1)*GRADE); }else{ rst=strVal.substring(strVal.length()-grade*GRADE,strVal.length()-(grade-1)*GRADE); } returnrst; } privatestaticStringgetSubUnit(StringstrVal){ //数值转换 Stringrst=""; for(inti=0;i Strings=strVal.substring(i,i+1); intnum=Integer.parseInt(s); if(num==0){ //“零”作特殊处理 if(i! =strVal.length()){//转换后数末位不能为零 rst+="零"; } }else{ //IfIntKey=1Andi=2Then //“壹拾”作特殊处理 //“壹拾”合理 //Else rst+=NUM.substring(num,num+1); //EndIf //追加单位 if(i! =strVal.length()-1){//个位不加单位 rst+=UNIT.substring(i+4-strVal.length(),i+4-strVal.length()+1); } } } returnrst; } /** * *@paramstrVal *@return */ privatestaticStringdropZero(StringstrVal){ //去除连继的“零” StringstrRst; StringstrBefore;//前一位置字符 StringstrNow;//现在位置字符 strBefore=strVal.substring(0,1); strRst=strBefore; for(inti=1;i strNow=strVal.substring(i,i+1); if(strNow.equals("零")&&strBefore.equals("零")){ ;//同时为零 }else{ strRst+=strNow; } strBefore=strNow; } //末位去零 if(strRst.substring(strRst.length()-1,strRst.length()).equals("零")){ strRst=strRst.substring(0,strRst.length()-1); } returnstrRst; } publicstaticvoidmain(String[]args){ System.out.println(RMB.toBigAmt(0.090D)); System.out.println(RMB.toBigAmt(10.090D)); System.out.println(RMB.toBigAmt(9.090D)); System.out.println(RMB.toBigAmt(9.290D)); System.out.println(RMB.toBigAmt(5.90D)); System.out.println(RMB.toBigAmt(10052345.00D)); System.out.println(RMB.toBigAmt(0.00D)); System.out.println(RMB.toBigAmt(0.60D)); System.out.println(RMB.toBigAmt(00.60D)); System.out.println(RMB.toBigAmt(150.2101D)); System.out.println(RMB.toBigAmt(15400089666.234D)); System.out.println(RMB.toBigAmt(15400089666.2347D)); System.out.println(RMB.toBigAmt(1111222233334444.2347D)); System.out.println(RMB.toBigAmt(111222233334444.2347D)); System.out.println(RMB.toBigAmt(11222233334444.2347D)); System.out.println(RMB.toBigAmt(1222233334444.2347D)); System.out.println(RMB.toBigAmt(222233334444.2347D)); //System.out.println(RMB.toBigAmt(33334444.2347D)); //java.math.BigDecimalbg=newjava.math.BigDecimal(1111222233334444.2347D); //System.out.println(bg.toString()); ////1111222233334444.25BigDecimal也不是很准确 System.out.println(RMB.toBigAmt(22200004444.2347D)); ////贰佰贰拾贰亿万肆仟肆佰肆拾肆元贰角叁分伍厘 System.out.println(RMB.toBigAmt(10004.2347D)); System.out.println(RMB.toBigAmt(22200000004.2347D)); System.out.println(RMB.toBigAmt(10400.0047D)); System.out.println(RMB.toBigAmt(1000000000000.23477777777777D)); System.out.println(RMB.toBigAmt(100100100.090566D)); //壹亿零壹拾万零壹佰元玖分 //壹亿零壹拾万零壹佰元玖分 } } 3.递归的算法求出n的阶乘 publicintfactorial(intn){ if(n==0||n==1){ return1; }else{ returnn*factorial(n-1); } } 4.m,n的最大公约数和最小公倍数 importjava.util.*; /*求最大公约数和最小公倍数*/ publicclassMaxCommonDivisorAndMinCommonMultiple{ publicstaticvoidmain(String[]args){ Scannerscan=newScanner(System.in);//接收控制台输入的信息 System.out.print("请输入第一个整数: "); intnum1=scan.nextInt();//取出控制台输入的信息 System.out.print("请输入第二个整数: "); intnum2=scan.nextInt();//取出控制台输入的信息 System.out.println(maxCommonDivisor(num1,num2));//调用maxCommonDivisor()方法 System.out.println(minCommonMultiple(num1,num2));//调用minCommonMultiple()方法 } //递归法求最大公约数 publicstaticintmaxCommonDivisor(intm,intn){ if(m inttemp=m; m=n; n=temp; } if(m%n==0){//若余数为0,返回最大公约数 returnn; }else{//否则,进行递归,把n赋给m,把余数赋给n returnmaxCommonDivisor(n,m%n); } } //循环法求最大公约数 publicstaticintmaxCommonDivisor2(intm,intn){ if(m inttemp=m; m=n; n=temp; } while(m%n! =0){//在余数不能为0时,进行循环 inttemp=m%n; m=n; n=temp; } returnn;//返回最大公约数 } //求最小公倍数 publicstaticintminCommonMultiple(intm,intn){ returnm*n/maxCommonDivisor(m,n); } } 5.素数 求100内的素数 publicvoidfindPrime(){ for(inti=2;i<=100;i++){ inttemp=(int)Math.sqrt(i); //我把那个aqrt单独提出来,这样速度稍微快一点,虽然在100内变化不大,但如果是10000000内的素数呢? if(i<=3){ System.out.println(i+"isaprime"); }else{ for(intj=2;j<=temp;j++){//把Math.sqrt(i)转换为int类形 if(i%j==0){ break; } if(j>=temp){ System.out.println(i+"isaprime"); } } } } } 求n-m间的素数 publicvoidfindPrime(intn,intm){ for(inti=n;i inttemp=(int)Math.sqrt(i); if(i<=3){ System.out.println(i); } for(intj=2;j<=temp;j++){ if(i%j==0){ break; } if(j>=temp){ System.out.println(i); } } } } 6.将一个二位的字符转换为十六进制数 privatestaticfinalchar[]hexes={'0','1','2','3','4','5','6', '7','8','9','a','b','c','d','e','f'}; publicstaticStringhex2Str(intiVal){ StringBuffersb=newStringBuffer(8); booleanstarted=false; for(inti=24;i>=0;i-=8){ byteb=(byte)(iVal>>i); intval=b>>4; if(val>0||started){ started=true; sb.append(hexes[b>>4]); } val=b&15; if(val>0||started){ started=true; sb.append(hexes[b&15]); } } returnsb.toString(); } 7.编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。 publicstaticvoidsplit(Stringsource,intnum){ intk=0; Stringtemp=""; for(inti=0;i byte[]b=(source.charAt(i)+"").getBytes(); k=k+b.length; if(k>num){ break; } temp=temp+source.charAt(i); } System.out.println(temp); } 8.有一个方法,传进一个字符串和拆分符,根据拆分符返回一个String[],不能用split() publicstaticString[]getArray(Strings,Stringmark){ StringTokenizerst=newStringTokenizer(s,mark); intcount=st.countTokens(); String[]strs=newString[count]; inti=0; while(st.hasMoreElements()){ strs[i]=(String)st.nextElement(); i++; } returnstrs; } publicstaticvoidmain(String[]args){ Strings="abc-eee-ppp";
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 上机 整理