大整数四则运算Java实现

                                     大整数四则运算Java实现

文章开始把我喜欢的这句话送个大家:这个世界上还有什么比自己写的代码运行在一亿人的电脑上更酷的事情吗,如果有那就是让这个数字再扩大十倍

import java.util.Random;
import java.util.Scanner;
/**
 * 大整数四则运算
 * @author beyond
 *
 */
public class Classone_2 { 
public static void main(String[] args){
Scanner leng=new Scanner(System.in);
System.out.println("please enter a's length: ");
int alength=leng.nextInt();
System.out.println("please enter b's length: ");
int blength=leng.nextInt();
int almlength = min(alength,blength);
int alalength = max(alength,blength);
Random r = new Random();
int[] a = new int[alalength];
int[] b = new int[alalength];
char[] c = {'+','-','*','/'};
int[] ares = new int[alalength+1];//存放加法的和,初始每位都为0
int[] bres = new int[alalength];//减法
int[] cres = new int[2*alalength];//乘法
   int[] dres = new int[alalength];//除法
   a[alalength-alength]=r.nextInt(9)+1;//随机产生一个大于等于0小于9的数再加1
   b[alalength-blength]=r.nextInt(9)+1;
   //位数少的那一个数组前几位是空的
   for(int i=alalength-alength+1;i<alalength;i++){
    a[i]=r.nextInt(10);
   }
   for(int i=alalength-blength+1;i<alalength;i++){
    b[i]=r.nextInt(10);
   }
  
   for(int i=alalength-alength;i<alalength;i++){
    System.out.print(a[i]);
   }
   int dom=r.nextInt(4);
   System.out.print(c[dom]);
   for(int i=alalength-blength;i<alalength;i++){
    System.out.print(b[i]);
   }//定义算式
   switch(dom)
   {
    case 0://add                
    for(int i=alalength-1;i>=0;i--){
                 ares[i+1]=a[i]+b[i]+ares[i+1];//ares[0]可能为0即两数相加有位数没有增长的情况
                 if(ares[i+1]>9){
                 ares[i]+=1;
                 ares[i+1]%=10;
                 }
           }
           System.out.print('=');
           if(ares[0]==0){//没有增长位数
                 for(int i=1;i<alalength+1;i++)
                  System.out.print(ares[i]);
           }
           else{
                  for(int i=0;i<alalength+1;i++)
                  System.out.print(ares[i]);
               }
      break;
                 
      case 1:
           int com = 0;
           //a>b com=1,a<b com=0
           if(alength<blength){
            com=0;
           }
           if(alength>blength) com=1;
           if(alength==blength){
            int i;
            for( i=0;i<alength;i++){
            if(a[i]<b[i]){
            com=0;
            break;
            }
            if(a[i]>b[i]){
            com=1;
            break;
            }
               }
            if(i==alength)
            com=1;//判断for循环没比出结果的情况下则a b相等
           }
           switch(com)
           {
             case 0://b>a
             for(int i=alalength-1;i>=0;i--){
             bres[i]=b[i]-a[i]+bres[i];
                 if(bres[i]<0){//向前借位
                 bres[i]+=10;
                 bres[i-1]-=1;
                 }
             }
             System.out.print('=');
             System.out.print('-');
             int flag=0;
             for(flag=0;flag<alalength;flag++){
             if(bres[flag]!=0)
                 break;
             }
             for(int i=flag;i<alalength;i++){
             System.out.print(bres[i]);
             }
             break;
             case 1://a>b
             for(int i=alalength-1;i>=0;i--){
             bres[i]=a[i]-b[i]+bres[i];
                     if(bres[i]<0){
                     bres[i]+=10;
                     bres[i-1]-=1;
                     }
                 }
                 System.out.print('=');
                 int flagg=0;
                 for(flagg=0;flagg<alalength;flagg++){
                     if(bres[flagg]!=0)
                     break;
                 }
                 for(int i=flagg;i<alalength;i++){
                     System.out.print(bres[i]);
                 }
                 break;
           }                   
           break;
           
           case 2:
           for(int i=alalength-1;i>=alalength-alength;i--){//乘法实现
               for(int j=alalength-1;j>=alalength-blength;j--){
                cres[i+j+1]=a[i]*b[j]+cres[i+j+1];//重新写入的方式改变数组的值
               }
           }
           for(int i=2*alalength-1;i>=0;i--){
            if(cres[i]>9){
            cres[i-1]+=cres[i]/10;
            cres[i]%=10;
           
           }
           System.out.print('=');
           int k=0;
           while(cres[k++]==0);//k为乘积的位数
              
           for(int i=k-1;i<2*alalength;i++)
           System.out.print(cres[i]); 
           
           break;
           
           case 3:
           int k1=alalength;
           while(true){
            for(int i=alalength-1;i>=0;i--){
            bres[i]=a[i]-b[i]+bres[i];
            if(bres[i]<0 && i!=0){
            bres[i]+=10;
            bres[i-1]-=1;
            }
               }            
            for(k1=0;k1<alalength;k1++){
            if(bres[k1]<0)
            break;
            }
            if(k1!=alalength)
            break;
            dres[alalength-1]++;
            for(int q=alalength-1;q>0;q--){
            if(dres[q]>9){
            dres[q-1]+=1;
            dres[q]%=10;
            }
            }
            for(int j=0;j<alalength;j++){
            a[j]=bres[j];
            bres[j]=0;         
            }           
          }
          System.out.print('=');
          int dr=0;
          while(dres[dr++]==0);
          for(int ll=dr-1;ll<alalength;ll++){
               System.out.print(dres[ll]);
          }
          System.out.print("...");
          int k2=0;
          while(a[k2++]==0);
              
          for(int i=k2-1;i<alength;i++)
               System.out.print(a[i]);            
          break;
       }
}
public static int max(int a,int b){
if (a>=b)
return a;
else
return b;
}
public static int min(int a,int b){
if (a<=b)
return a;
else
return b;
}

}


加油吧,程序员!

猜你喜欢

转载自blog.csdn.net/weixin_42248302/article/details/80889118
今日推荐