TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
- import java.util.*;
- import java.math.*;
- class fraction{//分数类
- BigInteger a, b;//a/b,b>0;
- fraction(){//构造函数1
- a = new BigInteger("0");
- b = new BigInteger("1");
- }
- fraction(BigInteger val){//构造函数2
- a = new BigInteger(val.toString());
- b = new BigInteger("1");
- }
- fraction(String a){
- this.a=new BigInteger(a);
- this.b=new BigInteger("1");
- }
-
- fraction( BigInteger a0, BigInteger b0){//构造函数3
- this.a = a0; this.b = b0;
- this.reduction();
- }
- fraction(String a,String b){
- this.a=new BigInteger(a);
- this.b=new BigInteger(b);
- this.reduction();
- }
- fraction( fraction other){
- this.a=new BigInteger(other.a.toString());
- this.b=new BigInteger(other.b.toString());
- }
- void reduction(){//化简
- BigInteger tmp = a.gcd( b );//其值是 abs(a) 和 abs(b) 的最大公约数。
- a = a.divide( tmp );
- b = b.divide( tmp );
- if( b.compareTo( BigInteger.ZERO ) == - 1 )
- {
- b = b.multiply( BigInteger.valueOf( -1 ));
- a = a.multiply( BigInteger.valueOf( -1 ));
- }
- }
- fraction add( fraction t ){//加一个
- fraction tmp = new fraction( a.multiply( t.b ).add( b.multiply( t.a )) , b.multiply(t.b) );
- tmp.reduction();
- return tmp;
- }
- fraction sub( fraction t ){//减
- fraction tmp = new fraction( a.multiply( t.b ).subtract( b.multiply( t.a )) , b.multiply(t.b) );
- tmp.reduction();
- return tmp;
- }
- fraction mult( fraction t){//乘
- fraction tmp = new fraction( a.multiply( t.a ), b.multiply( t.b ));
- tmp.reduction();
- return tmp;
- }
- fraction div( fraction t){//除
- fraction tmp = new fraction( a.multiply( t.b ), b.multiply( t.a ));
- tmp.reduction();
- return tmp;
- }
- fraction abs(){
- fraction tmp=new fraction(this);
- tmp.a=tmp.a.abs();
- return tmp;
- }
- void show(){
- this.reduction();
- if( b.compareTo( BigInteger.ONE ) == 0 )
- System.out.println(a);
- else
- System.out.println(a+"/"+b);
- }
-
- boolean Biger( fraction p )
- {
- return this.sub(p).a.compareTo(BigInteger.ZERO)==1;
- }
- int zero()
- {
- this.reduction();
- return this.a.compareTo(BigInteger.ZERO);
- }
- }
- public class Main
- {
- public static void main(String args[]){
- /*2x1+2x2-x3=6
- * x1-2x2+4x3=4
- *5x1+7x2+x3=28
- */
- fraction a[][]={{ new fraction("2"),new fraction("2"),new fraction("-1")},
- { new fraction("1"),new fraction("-2"),new fraction("4")},
- { new fraction("5"),new fraction("7"),new fraction("1")}};
- fraction b[]={new fraction("6"),new fraction("3"),new fraction("28")};
- gauss_cpivot(3,a,b);
- for(int i=0;i< 3;i++){
- b[i].show();
- }
-
-
- }
- static boolean gauss_cpivot(int n,fraction a[][],fraction b[])
- {//高斯消元法解方程组,有唯一解返回true,结果放在b[]中,否则返回false
- int i,j,k,row=0;
- for(k=0;k< n;++k)
- {
- fraction maxp=new fraction();
- for(i=k;i< n;++i)
- if(a[i][k].abs().Biger(maxp.abs()))
- {
- row=i;
- maxp=new fraction(a[i][k]);
- }
- if(maxp.abs().zero()==0)return false;
- if(row!=k)
- {
- for(j=k;j< n;++j)
- {
- fraction t=new fraction(a[k][j]);
- a[k][j]=a[row][j];
- a[row][j]=t;
- }
- fraction t=new fraction(b[k]);
- b[k]=b[row];
- b[row]=t;
- }
- for(j=k+1;j< n;++j)
- {
- a[k][j]=a[k][j].div(maxp);
- for(i=k+1;i< n;++i)
- a[i][j]=a[i][j].sub(a[i][k].mult(a[k][j]));
- }
- b[k]=b[k].div(maxp);
- for(i=k+1;i< n;++i)
- b[i]=b[i].sub(b[k].mult(a[i][k]));
-
- }
- for(i=n-1;i>=0;--i)
- for(j=i+1;j< n;++j)
- b[i]=b[i].sub(b[j].mult(a[i][j]));
- return true;
- }
-
- }
复制代码 运行:
1
3
2
源码下载:http://file.javaxxz.com/2014/12/2/000633312.zip |
|