您的位置:首页 > 其它

两个大数之间的相关运算

2016-08-13 10:50 183 查看
大数相减

import java.util.Scanner;

/*
进行大数相减,只能对两个正数进行相减
*/

public class BigNumber
{
public static void main(String[] args)
{
Scanner scan=new Scanner(System.in);
String a,b;
while (scan.hasNext())
{
BigNumber big=new BigNumber();

a=scan.nextLine();
b=scan.nextLine();

System.out.println(big.bigNumberSub(a,b));
}
}

public String bigNumberSub(String x,String y)
{
//String result=null;

char[] a=x.toCharArray();
char[] b=y.toCharArray();

int lenA=a.length;
int lenB=b.length;

int len=lenA>lenB?lenA:lenB;
int[] result=new int[len];

//字符串反转
char[] A=new char[lenA];
char[] B=new char[lenB];
for (int i=0;i<lenA;i++)
{
A[i]=a[lenA-i-1];
}

for (int j=0;j<lenB;j++)
{
B[j]=b[lenB-j-1];
}

//判断最终结果的正负
char sign='+';
if (lenA<lenB)
{
sign='-';
}
else if(lenA>lenB)
{
sign='+';
}
else
{
for (int i=lenA-1;i>=0;i--)
{
if (A[i]<B[i])
{
sign='-';
break;
}
else if(A[i]>B[i])
{
sign='+';
break;
}
}
}

//
int aInt,bInt;
for (int i=0;i<len;i++)
{

aInt=i<lenA?A[i]-'0':0;
bInt=i<lenB?B[i]-'0':0;

if (sign=='+')
{
result[i]=aInt-bInt;
}
else
{
result[i]=bInt-aInt;
}
}

//借位处理
for (int j=0;j<len;j++)
{
if (result[j]<0)
{

result[j+1]=result[j+1]-1;
result[j]=result[j]+10;
}
}

//将结果对应为0的位置取消掉
StringBuilder sb=new StringBuilder();
boolean flag=true;//防止结果集中的地位出现0

if (sign=='-')
{
sb.append(sign);
}
for (int i=len-1;i>=0;i--)
{
if (result[i]==0&&flag)
{

}
else
{
sb.append(result[i]);
flag=false;
}
}

return sb.toString();
//return result;
}
}


在Java中,还可以通过BigInteger类来解决精度问题。

import java.util.Scanner;
import java.math.BigInteger;

/*
进行大数相加,
*/

public class BigNumber
{
public static void main(String[] args)
{
Scanner scan=new Scanner(System.in);

while (scan.hasNext())
{
BigInteger  b1=new BigInteger(scan.nextLine());
BigInteger  b2=new BigInteger(scan.nextLine());

System.out.println(b1.add(b2));
//System.out.println(000);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐