POJ 1001 题目链接http://poj.org/problem?id=1001
计算浮点数的n次方,要求不用科学计数法,没有尾部以及开头零。
【代码】
import java.util.*; import java.math.*; public class Main{ public static void main(String[] args){ Scanner in=new Scanner(System.in); while(in.hasNext()){ BigDecimal a; int b; a=in.nextBigDecimal(); b=in.nextInt(); BigDecimal c=a.pow(b); String ans=c.stripTrailingZeros().toPlainString();//去掉尾部零,转换成非科学计数法字符串 if(ans.charAt(0)=='0'){//如果以0开头 ans=ans.substring(1);//返回以位置1开头的该字符串 } System.out.println(ans); } } }
POJ 1131 题目链接:http://poj.org/problem?id=1131
八进制浮点数转换成十进制
0.75 = 7/8+5/(8*8)=0.953125
【代码】
import java.util.*; import java.math.*; public class Main{ public static void main(String[] args){ Scanner in=new Scanner(System.in); while(in.hasNext()){ BigDecimal a; a=in.nextBigDecimal(); String ans=a.toPlainString(); BigDecimal fin=BigDecimal.ZERO; for(int i=2;i<ans.length();i++){ fin=fin.add(BigDecimal.valueOf(ans.charAt(i)-48).divide(BigDecimal.valueOf(8).pow(i-1))); } String fans=fin.stripTrailingZeros().toPlainString(); System.out.println(a+" [8] = "+fans+" [10]"); } } }
任意进制数(2-62)之间的相互转换
方法 先转换成10进制,再用取余法转换成所需进制
【代码】
import java.util.*; import java.math.*; public class Main{ public static void main(String[] args){ Scanner in=new Scanner(System.in); int n=in.nextInt(); while(n-->0){ int a,b; a=in.nextInt(); b=in.nextInt(); String str=in.next(); BigInteger big=BigInteger.ZERO; int k=0; for(int i=str.length()-1;i>=0;i--){ if(str.charAt(i)>='A'&&str.charAt(i)<='Z'){ //System.out.print(str.charAt(i)-'A'+10); big=big.add(BigInteger.valueOf(str.charAt(i)-'A'+10).multiply(BigInteger.valueOf(a).pow(k++))); } else if(str.charAt(i)>='a'&&str.charAt(i)<='z'){ big=big.add(BigInteger.valueOf(str.charAt(i)-'a'+36).multiply(BigInteger.valueOf(a).pow(k++))); } else if(str.charAt(i)>='0'&&str.charAt(i)<='9'){ //System.out.print(str.charAt(i)-'0'); big=big.add(BigInteger.valueOf(str.charAt(i)-'0').multiply(BigInteger.valueOf(a).pow(k++))); } } //System.out.println("ten :"+big); k=0; int num[]=new int[100000]; int sign=0; if(big.equals(BigInteger.ZERO)){ sign=1; } //取余法 while(!big.equals(BigInteger.ZERO)){ num[k++]=big.mod(BigInteger.valueOf(b)).intValue();//转换成int big=big.divide(BigInteger.valueOf(b)); } System.out.println(a+" "+str); System.out.print(b+" "); if(sign==1)//特判,如果输入0,上面的方法并未进行处理 System.out.print("0"); for(int i=k-1;i>=0;i--){ if(num[i]>=0&&num[i]<=9) System.out.print(num[i]); else if(num[i]>=10&&num[i]<=35){ char c=(char)(num[i]+'A'-10); System.out.print(c); } else if(num[i]>=36&&num[i]<=62){ char c=(char)(num[i]+'a'-36); System.out.print(c); } } System.out.println(); System.out.println(); } } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/chaiwenjun000/article/details/47110085