Java--高精度2

Java–高精度

用数组处理高精度

1.加法

public class Main 
{
	static int [] arr = new int [101];	
	static int next = 1;				//记录数值的位数,arr[1]为个位数
	/**
	 * 加法运算
	 * @param num 被加数
	 */
	public static void add(int num)		
	{
		arr[1] += num;					//无论被加数值多大,都加到个位数里
		for (int i = 1; i <= next; i++)
		{
			if (arr[i] >= 10)			//判断当前数值是否大于等于十
			{
				arr[i + 1] += arr[i] / 10;	//例如:12 = 1 * 10 + 2,arr[2]存十位数1,arr[1]存个位数2;
				arr[i] = arr[i] % 10;
				if (arr[next + 1] != 0)	//判断加法运算后数值位数有没有变大
				{
					next++;
				}
			}
		}
		return;
	}
    public static void main(String[] args) 
    {
		for (int i = 3; i <= 8; i++)
		{
			add(i);
		}
		for (int i = next; i >= 1; i--)	//从后往前输出
		{
			System.out.print(arr[i]);
		}
    }
}

例如:38 + 39

在这里插入图片描述

2.乘法(仅供参考)

public class Main 
{
	static int [] arr = new int [101];
	static int next = 1;
	/**
	 * 乘法运算
	 * @param num 被乘数
	 */
	public static void multiply(int num)
	{
		int [] result = new int [next + 1];		//用result存储乘数,也就是上一次乘法结果
		for (int i = 1; i <= next; i++)
		{
			result[i] = arr[i];
		}
		int k = 0;								//移位
		while (num > 0)							//被乘数每一位数都乘以result
		{
			for (int i = 1; i <= next; i++)
			{
				int t = result[i] * (num % 10);
				if (k == 0)
				{
					arr[i + k] = t;
				}
				else
				{
					arr[i + k] += t;
				}
			}
			num /= 10;
			k++;
		}
		for (int i = 1; i <= next; i++)			//数组中每个数要小于十
		{
			if (arr[next + 1] != 0)
			{
				next++;
			}
			if (arr[i] >= 10)
			{
				arr[i + 1] += arr[i] / 10;
				arr[i] = arr[i] % 10;
			}
		}
		return;
	}
    public static void main(String[] args) 
    {
    	arr[1] = 1;							//没有这一步,结果都是零
		for (int i = 110; i <= 115; i++)
		{
			multiply(i);
		}
		for (int i = next; i >= 1; i--)
		{
			System.out.print(arr[i]);
		}
    }
}

例如:38 * 39

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值