Java 大数学习之旅

来源:互联网 发布:网络应急指挥体系 编辑:程序博客网 时间:2024/05/22 15:33

/*****大数阶乘*****/

import java.io.*;

import java.math.*; // 包含大数类的包

import java.util.*;  // 包含输入头的包

public class Main

{

         public static void main(String args[])

         {

                   Scanner cin = newScanner(System.in);        // 输入必备句

                   int n = cin.nextInt();   // 给n赋值

                   BigInteger ans =BigInteger.ONE;         // 定义一个大数赋初始值1

                   for(int i = 1; i <= n;++i)

                   ans =ans.multiply(BigInteger.valueOf(i));   //将参数 i 转换为制定的类型

                   System.out.println(ans);                 // 输出ans 并换行

         }

}

 

/****头文件****/

import java.io.*;

import java.math.BigInteger;    // 大数头文件

import java.math.BigDecimal;   // 小数头儿文件

importjava.util.*;              // 输入头文件

 

 

/****大数运算****/  

特别提醒:/****** 这里的函数只对大数类操作******/


BigIntegera,b,c;

int d;

long e;

float f;

double g;

String s;

               

Scanner cin=newScanner(System.in);        

a=cin.nextBigInteger();

b=cin.nextBigInteger();

d=cin.nextInt();

 

c=a.add(b);             //  相加

c=a.subtract(b);       //    相减

c=a.multiply(b);          // 相乘

c=a.divide(b);        // 相除取整

c=a.gcd(b);          //  最大公约数

c=a.remainder(b);   //  取余

c=a.mod(b);         // a mod b

c=a.abs();           // a的绝对值

c=a.negate();        // a的相反数

c=a.pow(d);           // a的b次幂        d为int型    

c=a.max(b);           //  取a,b中较大的

c=a.min(b);                //  取a,b中较小的

d=a.compareTo(b);      //  比较a与b的大小   d=-1小于 d=0等于 d=1大于  d为int

a.equals(b);            //  判断a与b是否相等    相等返回true  不相等返回false  

 

d=a.intValue();      //       将大数a转换为 int 类型赋值给 d

e=a.longValue();     //       将大数a转换为  long 类型赋值给 e

f=a.floatValue();    //       将大数a转换为  float 类型赋值给 f

g=a.doubleValue();   //       将大数a转换为  double 类型赋值给 g

s=a.toString();      //     将大数a转换为 String 类型赋值给 s

a=BigInteger.valueOf(e);  // 将 e 以大数形式赋值给大数 a   e只能为long或int

a=newBigInteger(s, d);  // 将s数字字符串以d进制赋值给大数a如果d=s字符数字的进制则等同于将数字字符串以大数形式赋值给大数a       

/******大数基本常量******/

 

    A=BigInteger.ONE   1

   B=BigInteger.TEN    10

C=BigInteger.ZERO  0

 

/*******数据的读入******/

 

String s="12345"; //  String 初始化           

用Scanner类定义对象进行控制台读入,Scanner类在java.util.*包中
Scanner cin=new Scanner(System.in);             // 读入  最好在程序结束后加上cin.close();清空

 

While()与if()用法:

Boolean a= true,b=false;

while(a) 等价于while(!b)  相当于 C++ 中的 while(1)

while(b) 等价于while(!a)  相当于 C++ 中的 while(0)

if(a)  等价于 if(!b)等价于 if(!false)等价于 if(true)  相当于C++中的 if(1)

if(b)  等价于 if(!a)等价于 if(!true) 等价于 if(false) 相当于C++中的 if(0)

while(n-->0)      // 等价 while(n--) n减到0

 

EOF:用法

普通的数: while(cin.hasNextInt())               //等同于!=EOF,第一数一定要输入整形的

大数的一般是:while(cin.hasNextBigInteger())  //第一个数一定要输入大数

System.out.print(m.toString());                       //  m.toString()  将m转为String 类   

while(n-->0)      // 等价while(n--) n减到0

System.out.print(n);  // 输出n

System.out.println(n);// 输出n并换行

System.out.println("Case#"+(t++)+":"+" "+c.toString(2));   //t为int  c为大数  输出时字符与字符之间用+隔开   字符与字符之间有数据 在数据两边都加上+

换行符  System.out.print("\n");或 System.out.println();

输出空格  System.out.print(" ");

                       

int a;

short b;

float c;

double d;

char e;

String s;

s=cin.nextLine();  // 读取一行文本,可带空格,回车结束读取

s=cin.next();      // 只读取一个单词,遇空格不再读取,遇回车结束

a=cin.nextInt();

b=cin.nextShort();

c=cin.nextFloat();

d=cin.nextDouble();

e=(char)System.in.read();  //  读取单个字符

 

/****特别注意****/

 

e=(char)System.in.read(); // 如果这样输入单个字符必需加上throws IOException

即:

/*** publicstatic void main(String[] args)throws IOException  {  }***/

 

还需注意的是:

char 和 String 对象的输入之前有其他数据输入需加上cin.nextLine();去掉回车

 

 

/****字符串数组****/

 

//  char c[]={’a’,’b’,’c’};       初始化定义

//  charc[][]={{’a’,’b’},{’c’,’d’},{’e’,’f’}};   初始化定义

 

String s;  //   s.length()  获取 s的长度

char c [];  //   c.length    获取 c的长度

 

将String转换到char[]一维字符数组中

方法一:

String s;

char c[];

s=cin.nextLine();

c = s.toCharArray();          // 将字符串对象中的字符转换为一个字符数组存入到c中

for(int i=0;i<c.length;i++)

System.out.print(c[i]);  // 输出每个字符

 

方法二:

String s;

char c[];

c = new char[1000];

s=cin.nextLine();

for(int i=0;i<s.length();i++)

    c[i]=s.charAt(i);                  //  返回s的第i个字符赋给 c[i]

for(int i=0;i<c.length;i++)

        System.out.print(c[i]);     // 输出每个字符

 

 

将String转换到char[][]二维字符数组中

 

Scanner cin=newScanner(System.in);

int n;

String s[]=newString[1000];

char  c[][]=newchar[1000][1000];

n=cin.nextInt();   

cin.nextLine();     // 去掉读入n后留下的换行符

for(int i=0;i<n;i++)

{

    s[i]=cin.nextLine();

    c[i]=s[i].toCharArray();

}

for(int i=0;i<n;i++)

{

System.out.println(c[i]);

System.out.println(s[i]);
}

 

 

/****整型数组****/

 

// int a[]={0,1,2,3};   初始化定义

// int a[][]={{0,1},{2,3},{4,5}};  初始化定义

 

数组定义

方法一:

//  int a [] = new int [1000] ;            一维

//  int a [][] = new int [1000][1000] ;    二维

方法二:

int n;

int a[][] ; 

a = new int[1000][1000];

n=cin.nextInt();            // 输入n的值

 

for(int i=0;i<n;i++)

for(int j=0;j<n;j++)

a[i][j]=cin.nextInt();     //  给a[i][j]输入值

 

for(int i=0;i<n;i++)

for(int j=0;j<n;j++)

System.out.println(a[i][j]);

 

 

/*****进制转换*****/

 

String st = Integer.toString(num, base); //intnum10进制的数转成base进制数存入st    (base <= 35).

int num = Integer.parseInt(st, base); //st当做base进制,转成10进制的int

(parseInt有两个参数,第一个为要转的字符串,第二个为说明是什么进制).  
BigInter m = new BigInteger(st, base); // st
是字符串,basest的进制.

总结:

 

BigIntegera;

int b;

Stringc;

a=cin.nextBigInteger(b);   //b进制读入一个大数赋值给a

c=a.toString(b);          // 将大数ab进制的方式赋给字符串c

a=newBigInteger(c, b);  //把c当做“b进制“转为十进制大数赋值给a

 

 

可以以任意(最好不要超过16)进制输入给大数赋值,但却只能将其转为10进制的大数,但却可以以字符串的形式输出大数的任意(最好不要超过16)进制的字符串

 

BigInteger a;

String c;

int b;

b=cin.nextInt();

a=cin.nextBigInteger(b);          //  以b进制读入一个大数赋值给a

c=a.toString(b);               //  将大数a以b进制的方式赋给字符串c

a=newBigInteger(c, b);         //  将b进制字符串 转为十进制大数赋值给a System.out.println(a);

 


0 0
原创粉丝点击