JAVA大数练习第三弹

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();
		}
	}
}



posted @ 2015-07-28 19:46  编程菌  阅读(147)  评论(0编辑  收藏  举报