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]");
}
}
}
POJ 1220
任意进制数(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();
}
}
}