java(acm入门)“大数”学习总结

这篇博客内的许多东西都是从大佬那里总(ban)结(yun)来的,之前浏览了很多博客,有些没有放在收藏夹里,大佬别打我w(゚Д゚)w
之所以学java 也是因为大数,高精度方面的题目做起来代码量会少一些
这里先贴几个收藏夹里面还有的连接
膜大佬
膜大佬
膜大佬

作为一名蒟蒻,我之前敲过一小点代码 (轻拍)(┭┮﹏┭┮)
这些都是在看了大佬的总结后实验的,有些是在杭电oj做题遇到了的就顺便写了一些容易被忽略的。
代码也有很多参照大佬的地方。
有些地方有“//”是之前为了调试弄得

import java.math.*;
public class biginteger {
    public static void main(String args[]) {
//         int a = 123, b = 456999, c = 7890;
//          BigInteger x, y, z, ans;
//          x =new BigInteger("459999"); y = BigInteger.valueOf(b); z = BigInteger.valueOf(c);
//          ans=x.add(y);
//          System.out.println(" "+ans);
//          int m=x.compareTo(y);
//          if(x.compareTo(y)>0)
//              System.out.println("Yes");
//          if(x.compareTo(y)<0)
//              System.out.println("No");
//          if(x.compareTo(y)==0)
//              System.out.println("equal");
        int num=10;
        String st = Integer.toString(num, 2); // (num,back)把num当做10进制的数转成back进制的st(back <= 35).

         num = Integer.parseInt(st, 8); // (st,back)把st当做back进制,转成10进制的int(parseInt有两个参数,第一个为要转的字符串,第二个为说明是什么进制).   
    }
}

注释里面都有写,就不啰嗦了(#^.^#)

package BigInteger;
import java.util.*;
import java.math.*;
import java.text.*;
public class test1 {
    public static void main(String args[]) {
        System.out.println("hello  world");
    //Scanner + String  输入方式  +字符串 import java.util.*(输入);
        /*  String a;
    Scanner in=new Scanner(System.in);     //输入12 23
    a=in.nextLine(); // 可含有空格,回车结束//输入12 23
 String m=in.next(); //不可含有空格 遇到空格结束
    System.out.println("test"+" "+ a+"\n"+m); //结果:test 12 23(换行)
                                              //12
    String b="yang 123456";
    char c=b.charAt(0);
    //substring 子串从(int x)到结尾  (int x,int y)从 x 到 y
System.out.println("测试"+b.substring(2)+" "+b.substring(2,7)+" "+"测试c "+c);  //结果:测试ng 123456 ng 12 测试c y
        */
        //BigInteger 整数   import java.math.*;
/*BigInteger bi1=new BigInteger("11111111111111111111");
BigInteger bi2=new BigInteger("22222222222222222222");
BigInteger bi3=bi2.add(bi1);//加
BigInteger bi4=bi2.subtract(bi1);//减
BigInteger bi5=bi1.divide(bi2);//除
BigInteger bi6=bi2.multiply(bi1);//乘
System.out.println("BigInteger test"+" "+bi3+" "+bi4+"\n"+bi5);
    }
    */
        //BigDecimal 小数 import java.math.*;      
//      BigDecimal b1=new BigDecimal("11111111111.11111");
//  BigDecimal b2=new BigDecimal("22222222223.2332");
//      BigDecimal b3=b1.add(b2);         //加法
//      BigDecimal b4=b1.multiply(b1);    //乘法
//      BigDecimal result[]=b2.divideAndRemainder(b1);//商result[0]和余数 result[1]  
//      System.out.println("BigDecimal"+" "+b3+"乘法"+b4+"商"+result[0]+" 余数"+result[1]);

        //DecimalFormat 格式输出  import java.text.*;
    /*DecimalFormat test1=new DecimalFormat("#.000000000#####");//小数部分超出的位数四舍五入(只看前一位)
    //“#”若“#”为高位且高位为0则不显示
    DecimalFormat test2=new DecimalFormat("0000000.0000000");
    System.out.println(test1.format(34556.124553));
    System.out.println(test2.format(34556.124553));
    */

    }
}

这个是关于toPlainString


import java.util.*;
import java.math.*;

public class toPlainstringANDstripTrailingZeros {
    public static void main(String args[]) {
        Scanner in=new Scanner(System.in);
        BigDecimal a,b;

        while(in.hasNextBigDecimal()) { 
            a=in.nextBigDecimal();
            b=in.nextBigDecimal();  
            BigDecimal c=a.add(b);
            System.out.println(c.stripTrailingZeros().toPlainString());//可以实现去掉末尾的0,,这里如果使用toString()
                                                                        //会变成科学计数法输出,
                                                                        //toPlainString可以输出数值
        }
    }
}

这是计算次方的

import java.util.*;
import java.math.*;
import java.text.*;

public class pow {
    public static void main(String args[]) {
        Scanner in=new Scanner(System.in);
        int n;
        BigDecimal q;
        BigDecimal ans;
        BigDecimal z=new BigDecimal("0");
        while(in.hasNext()) {
            ans=new BigDecimal("1");
            q=in.nextBigDecimal();
            n=in.nextInt();
            String aa;

            if(q.compareTo(z)==0)
                System.out.println("0");
            else {
                for(int i=0;i<n;i++)
                    ans=ans.multiply(q);
                aa=ans.stripTrailingZeros().toPlainString();//直接以字符串转入,toString会导致回到科学计数
                if(aa.startsWith("0"))
                    aa=aa.substring(1);  //如果从零开始去掉零
                System.out.println(aa);
            }
        }
    }
}

之前学到的就是这些吧,以后学到的再贴上来(#^.^#)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值