一、乘数和被乘数为long类型的
public class BigNumberChengLong {
public static void main(String[] args) {
long p1 = 1234567890;
long p2 = 1234567890;
int result[] = new int[18];//保存结果
for(int i:result){
result[i] = 0;
}
int pi1[] = new int [getLength(p1)];
int pi2[] = new int [getLength(p2)];
//将乘数和被乘数存入数组中
long temp = p1;
int num = 0;
int i = 0;
while (temp > 0){
num = (int) (temp%10);
pi1[i] = num;
i ++;
temp /= 10;
}
temp = p2;
i = 0;
while (temp > 0){
num = (int) (temp%10);
pi2[i] = num;
i ++;
temp /= 10;
}
//计算
temp = 0; //临时结果
int step = 0;//进位
int time = 0;//次数
int bit = 0;//位数
for(int j:pi1){
time = bit;
for(int k:pi2){
temp = j * k;
temp = temp + result[time];
if(temp > 9){
int m = 0;//进位的次数
do{
result[time + m] = (int) (temp%10);
step = (int) ((temp - temp%10)/10);
m ++;
temp = result[time + m] + step;
}while (temp > 9);
}else {
result[time] = (int) temp;
}
time ++;
}
bit ++;
}
System.out.println("***************************************");
int length = result.length - 1;
while(result[length] == 0){
length --;
}
for(int j = length; j >= 0; j --){
if(result[length] == 0){
}
System.out.print(result[j]);
}
System.out.println();
System.out.println("***************************************");
}
//获得long类型的长度
private static int getLength(long temp){
int i = 0;
while (temp > 0){
temp = temp/10;
i ++;
}
return i;
}
}
二、乘数和被乘数是String类型的
public class BigNumberChengString {
public static void main(String[] args){
String p1 = "123456789012345678901234123456789012345678901234";//"123456789012345678901234";
String p2 = "987654321098765432109876543210987654123456789012345678901234";//"987654321098765432109876543210987654";
int ASCII = 48;
char[] result = new char[p1.length() + p2.length()];
for (int i = 0; i < result.length; i++) {
result[i] = '0';
}
char ctemp = ' ';
char[] pc1 = p1.toCharArray();
for (int i = 0; i < pc1.length / 2; i++) {
ctemp = pc1[i];
pc1[i] = pc1[pc1.length - 1 - i];
pc1[pc1.length - 1 - i] = ctemp;
}
char[] pc2 = p2.toCharArray();
for (int i = 0; i < pc2.length / 2; i++) {
ctemp = pc2[i];
pc2[i] = pc2[pc2.length - 1 - i];
pc2[pc2.length - 1 - i] = ctemp;
}
int temp = 0;//临时结果
int step = 0;//进位
int time = 0;//次数
int bit = 0;//位数
for (char c1 : pc1) {
time = bit;
for (char c2 : pc2) {
temp = (c1 - ASCII) * (c2 - ASCII);
temp = temp + result[time] - ASCII;
if (temp > 9) {//进位
int i = 0;
do {
result[time + i] = (char) (temp % 10 + ASCII);
step = (temp - temp % 10) / 10;
i++;
temp = result[time + i] - ASCII + step;
} while (temp > 9);
result[time + i] = (char) (temp + ASCII);
} else {
result[time] = (char) (temp + ASCII);
}
time++;
}
bit++;
}
System.out.println("##############################");
System.out.print(p1 + " x " + p2 + " = ");
for (int i = result.length - 1; i >= 0; i--) {
System.out.print(result[i]);
}
System.out.println();
System.out.println("##############################");
}
}
分享到:
相关推荐
分治法求两个大整数相乘C++实现。
超大整数相乘算法的VB实现源代码超大整数相乘算法的VB实现源代码
大整数相乘问题利用分而治之算法--来源于平时的作业
是算法分析中的一个实验 用数组实现 用二重循环控制按位交叉相乘
程序演示了两个任意长度的正整数相乘,采用了数组来实现。欢迎各位探讨!
自己写的大整数相乘算法,算法里包含有大整数相加算法。
分治法 两个大整数相乘(十进制的)大整数相乘C++源码.cpp
在计算机语言中,整数最大可以设置为unsigned long类型的,但是表示有限,当涉及到两个大整数相乘的时候,会出现不能表示的情况,鉴于此编制此算法予以解决大整数相乘。本程序使用分治法实现,将n位二进制整数X和Y都...
java写的大整数乘法 可以计算很大的整数
用递归分治的方法实现大整数相乘,解决了超出计算机表达范围的整数相乘问题,为了减小文件大小仅上传.cpp文件
大整数相乘,仅作参考。利用竖式的。不是分治算法的喔。
对大整数相乘进行运算,如超过int long等范围的运算,有大量注释,简单易懂,vector容器实现,较于数组更加方便。
JAVA实现的两个特大整数相乘的算法,可以达到1000位数相乘。
本程序实现两个100位以内的大整数相乘的算法。 大家可以借鉴一下,如果可以再改进一下就更好了。
两个大整数相乘是一道实践意味很浓的算法题目,本文讨论了Win32下无符号大整数相乘的基本解法和两个优化算法。
利用分治法设计一个计算两个n位的大整数相乘的算法,要求计算时间低于O(n2)。支持不同位数大数的相乘。
对一般的大整数有效,不支持负数;只供各位参考
大整数的乘法 算法课程设计 比较简单大家快来看看吧
超大整数相乘算法的VB实现与源代码分析,可以显示执行过程,运算速度快,有一个特点就是乘数和被乘数都必须是数字,没有涉及更高深的理论,有需要的研究一下。
算法分析PPT(分治法-大整数、矩阵相乘).ppt)