作业帮 > 综合 > 作业

3.两个数相乘,小数点后位数没有限制,请写一个高精度算法 与大数相乘原理一样,只是调整小数点位

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/29 02:18:54
3.两个数相乘,小数点后位数没有限制,请写一个高精度算法 与大数相乘原理一样,只是调整小数点位
输入 string a,string b;计算string c=a*b; 返回 c;
1.纪录小数点在a,b中的位置l1,l2,则需要小数点后移动位置数为l=length(a)+length(b)-l1-l2-2;
去掉a,b中的小数点,(a,b小数点后移,使a,b变为整数)
计算c=a*b; (要么用java的BigInterger搞,要么自己用C++写高精度数乘法,超过百万位,用FFT,我就不细说,这都预先写过就别做了)
输出c,(注意在输出倒数第l个数时,输出一个小数点。若是输出的数少于l个,就补0)
要求给出符合要求的程序
import java.util.*;
class AddBigNumber{

public static StringBuffer Mul(StringBuffer s1,StringBuffer s2){
StringBuffer sb=new StringBuffer();
for(int i=0;i=0;i--){
for(int j=s2.length()-1;j>=0;j--){
int m=(int)(s1.charAt(i)-'0')*(int)(s2.charAt(j)-'0');
int n=i+j+1;
int x=(int)(sb.charAt(n)-'0');
x=x+m;
char c=String.valueOf(x%10).charAt(0);
sb.setCharAt(n,c);
while(x>=10){
m=x/10;
n--;
x=(int)(sb.charAt(n)-'0');
x=x+m;
c=String.valueOf(x%10).charAt(0);
sb.setCharAt(n,c);
}
}
}
return sb;

}
public static void main(String[] args){

StringBuffer sb=new StringBuffer("1");
StringBuffer s;
for(int i=1;i