题目
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));
}
}