JAVA题目-数组3

题目
3、编写程序,通过命令行参数给程序传入两个大整数(其中至少有一个整数超过35位),首先对两个数进行显示,计算两数之和与差,输出结果。请注意,输出的结果请务必符合书写习惯。
如:
num1=40300000000000000000000000000000000000000000000
num2=40200000000000000000000000000000000000000000000
或者
num1=4632864832684683568465765487657665765236465244
num2=67

  • 数组实现
import java.util.Scanner;

public class Three {
    static void StringToInt(int []num,String s) {
        for(int i=0;i<s.length();i++)
            num[i]=Integer.parseInt(s.substring(i,i+1));
    }
    static void Print(int []num) {
        for(int i:num)
            System.out.print(i);
        System.out.println();
    }

    static char sign(int[] num1,int[] num2) {
        if(num1.length < num2.length) {
            return '-';
        }
        else if(num1.length == num2.length){
            int i=0;
            while(i<num1.length&&num1[i]==num2[i]) {
                i++;
            }
            if(i<num1.length&&num1[i]<num2[i]) {
                return '-';
            }

        }
        return '+';
    }
    static void add(int[] num1,int[] num2) {
        int len = num1.length>num2.length ? num1.length : num2.length;
        int []sum=new int[len+1];   // 倒序存储和
        int i=num1.length-1,j=num2.length-1;
        int k=0;
        int cin=0,temp=0;
        while(i>=0&&j>=0) {
             temp=num1[i]+num2[j]+cin;
            sum[k]=temp%10;
            cin=temp/10;
            i--;
            j--;
            k++;
        }
        while(i>=0&&j<0) {
            temp=num1[i]+cin;
            sum[k]=temp%10;
            cin=temp/10;
            k++;
            i--;
        }
        while(i<0&&j>=0) {
            temp=num2[j]+cin;
            sum[k]=temp%10;
            cin=temp/10;
            k++;
            j--;
        }
        if(cin!=0) 
            sum[k]=cin;
        else k--;
        System.out.print("num1+num2=");
        for(int t=k;t>=0;t--) {
            System.out.print(sum[t]);
        }
    }

    static int[] sub(int[] num1,int[] num2) {
        int len = num1.length > num2.length ? num1.length : num2.length;
        int[] sub=new int[len];
        int i = num1.length - 1, j = num2.length - 1;
        int k=0,temp=0;
        while(j>=0&&i>=0) {
            temp=num1[i]-num2[j];
            if(temp<0) {
                temp=temp+10;
                num1[i-1]=num1[i-1]-1;
            }
            sub[k]=temp;
            i--;
            j--;
            k++;
        }
        while(i>=0&&j<0) {
            temp=num1[i];
            if(temp<0) {
                temp=temp+10;
                num1[i-1]=num1[i-1]-1;
            }
            sub[k]=temp;
            i--;
            k++;
        }
        while(k>0&&sub[k-1]==0) {
            k--;
        }
        int n=k;
        if(k==0)  return null;
        int[] result=new int[n];
        for(int t=0;t<n;t++) {
            result[t]=sub[k-1];
            k--;
        }

        return result;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner input=new Scanner (System.in);
        System.out.print("Enter first num:");
        String s1=input.next();
        System.out.print("Enter second num:");
        String s2=input.next();
        int []num1=new int[s1.length()];
        int[] num2=new int[s2.length()];

        StringToInt(num1,s1);
        StringToInt(num2,s2);
        System.out.print("num1 = ");
        Print(num1);
        System.out.print("num2 = ");
        Print(num2);
        int len = num1.length > num2.length ? num1.length : num2.length;

        add(num1,num2);
        System.out.println();
        int sub[]=new int[len];
        char ch =sign(num1,num2);
        if(ch=='+') {
            sub=sub(num1,num2);
            if(sub==null)
                System.out.print("num1-num2=0");
            else {
                System.out.print("num1-num2=");
                Print(sub);
            }
        }
        else if(ch=='-'){
            sub=sub(num2,num1);
            System.out.print("num1-num2= -");
            Print(sub);
            }
    }
}
  • BigInteger类实现
import java.math.BigInteger;
import java.util.Scanner;

public class Three {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner input=new Scanner(System.in);
        String s1,s2;
        s1=input.next();
        s2=input.next();    
        input.close();
        BigInteger num1=new BigInteger(s1);
        BigInteger num2=new BigInteger(s2);

        System.out.println(""+num1+" - "+num2+" = "+num1.subtract(num2));
        System.out.println(""+num1+" + "+num2+" = "+num1.add(num2));

    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值