所谓大整数的运算就是这些整数运算起来超过了int,double的存储范围
我们把它转化为字符串,因为字符串的长度是没有限制的
分几步:
(1)num1、num2转化为字符串
int num1[] = new int[a.length()];//大数1
int num2[] = new int[b.length()];//大数2
int num3[] = new int[a.length()+b.length()];//结果数组
for (int i = 0; i < num1.length; i++)
{
num1[i] = a.charAt(num1.length-1-i)-48;//大数1 最先输出的是个位数
//charAt是搜索制定处的字符,可以看出最先搜索到的是各位
//字符和数字相减是二者的ASCII值运算 0-9 :48-57 A-Z: 65-90 a-z 97-122
}
for (int i = 0; i < num2.length; i++)
{
num2[i] = b.charAt(num2.length-1-i)-48;//大数2
}
(2)求出二者的积num3
for (int i = 0; i < num1.length; i++)
{
for (int j = 0; j < num2.length; j++)
{
int tmp1 = num1[i]*num2[j]/10;//这里是会进位的情况
int tmp2 = num1[i]*num2[j]%10;//本位
num3[i+j] = num3[i+j]+tmp2;
num3[i+j+1] = num3[i+j+1]+tmp1; //注意i+j+1
}
}
(3)对num3进行判断可能存在一个位置是两位数字的情况
for (int i = 0; i < num3.length-1; i++)
{
int tmp1 = num3[i]/10;//进位
int tmp2 = num3[i]%10;//本位
num3[i] = tmp2;
num3[i+1] = num3[i+1] + tmp1;
}
return num3;
}
(4)在main函数中输入数字,调用函数,判断num3的最高位是不是为0
{
//123456789*987654321=121932631112635269
Scanner in = new Scanner(System.in);
while(in.hasNext())//has NEXT 判断输入
{
String num1 = in.next(); //获取第一个输入的数字
String num2 = in.next();//获取第二个输入的数字
//System.out.println (N + " " + M);
// String num1 = "123456789";
// String num2 = "987654321";
System.out.print(num1+"*"+num2+"=");
int num3[] = MulDemo.a_Mul_b(num1,num2);
if(num3[num3.length-1]==0)//最高位为零
{
for (int i = num3.length-2; i >= 0; i--)
{
System.out.print(num3[i]);
}
}
else//最高位不为零
{
for (int i = num3.length-1; i >= 0; i--)
{
System.out.print(num3[i]);
}
}
}
}
}
总的代码如下:
public static void main(String[] args)
{
//123456789*987654321=121932631112635269
Scanner in = new Scanner(System.in);
while(in.hasNext())
{
String num1 = in.next();
String num2 = in.next();
//System.out.println (N + " " + M);
// String num1 = "123456789";
// String num2 = "987654321";
System.out.print(num1+"*"+num2+"=");
int num3[] = MulDemo.a_Mul_b(num1,num2);
if(num3[num3.length-1]==0)//最高位为零
{
for (int i = num3.length-2; i >= 0; i--)
{
System.out.print(num3[i]);
}
}
else//最高位不为零
{
for (int i = num3.length-1; i >= 0; i--)
{
System.out.print(num3[i]);
}
}
}
}
}
class MulDemo
{
public static int[] a_Mul_b(String a, String b)
{
int num1[] = new int[a.length()];//大数1
int num2[] = new int[b.length()];//大数2
int num3[] = new int[a.length()+b.length()];//结果数组
for (int i = 0; i < num1.length; i++)
{
num1[i] = a.charAt(num1.length-1-i)-48;//大数1
}
for (int i = 0; i < num2.length; i++)
{
num2[i] = b.charAt(num2.length-1-i)-48;//大数2
}
for (int i = 0; i < num1.length; i++)
{
for (int j = 0; j < num2.length; j++)
{
int tmp1 = num1[i]*num2[j]/10;//进位
int tmp2 = num1[i]*num2[j]%10;//本位
num3[i+j] = num3[i+j]+tmp2;
num3[i+j+1] = num3[i+j+1]+tmp1;
}
}
//num3调整
for (int i = 0; i < num3.length-1; i++)
{
int tmp1 = num3[i]/10;//进位
int tmp2 = num3[i]%10;//本位
num3[i] = tmp2;
num3[i+1] = num3[i+1] + tmp1;
}
return num3;
}
}
注:本代码是在别人的代码上进行的改进
原文链接:https://blog.csdn.net/twgfwhud/article/details/50986931