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