1.乘法规律,一个数的第i位和另一个数的第j位相乘,一定会累加到结果的第i+j位,结果的数组一个数组元素存2位数,最后对结果处理进位,最后打印出来。
注:相乘后的位数k不会超过m+n。
乘法计算步骤如下:
a数组存一个数,b数组存一个数,按位相乘后放入c数组中。
#include#include #include #define M 10000 char s1[M],s2[M],s[M]; int a[M],b[M],c[M]; int main(){ int i,j,m,n,k; scanf("%s%s",s1,s2); memset(c,0,sizeof(c)); n=strlen(s1); m=strlen(s2); k=n+m;//保证相乘后的位数不会大于k printf("s1的长度=%d s2的长度=%dn",n,m); for(i=0; i =10){ c[i+1]=c[i+1]+c[i]/10; c[i]=c[i]%10; } } i=k; while(c[i]==0) i--; if(i<0){ printf("0"); } else{ for(; i>=0; i--) printf("%d",c[i]); } printf("n"); return 0; }
代码运行和计算结果如下:
import java.util.Scanner;
public class BigDecimal {
// 以字符串的方式输入两个超大的整数,将两个数值相乘的结果计算出来
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String a = in.next();
String b = in.next();
String result = multiply(a, b);
System.out.println(result);
}
// 计算两个整数相乘
private static String multiply(String a, String b) {
//用来存储结果
StringBuilder ans = new StringBuilder();
//反转两个大整数,以便从个位开始相乘
StringBuilder a1 = new StringBuilder(a);
StringBuilder b1 = new StringBuilder(b);
a1.reverse();
b1.reverse();
//用来存储中间计算的结果
int[] arr = new int[a1.length() + b1.length()];
//开始相乘,从两个大整数的个位开始,也就是反转后的第一位
for(int i = 0; i < a1.length(); i++){
//b的每一位与a的第i为乘积,每循环乘b每一位一次,a移动一位
for(int j =0; j < b1.length();j++){
//这里构成了错位相加,进而保存了结果中每一位的累加和,这里数字的字符与‘0’字符相减等于数字本身
arr[i+j] += (a1.charAt(i) - '0') * (b1.charAt(j) - '0');
}
}
//给每一位大于十的进位,保留余数
for(int i = 0; i < arr.length - 1; i++){
arr[i+1] += arr[i] / 10;
arr[i] %= 10;
}
//把结果放到答案集里面去
for(int i = 0; i < arr.length - 1; i++){
ans.append(arr[i]);
}
return ans.reverse().toString();
}
}
代码思想和C语言基本一致。
计算结果如下:
由于python具有无限精度的int类型,所以用python实现大整数乘法是没意义的,但是思想是一样的。
我是罡罡同学,一位初入网安的小白。☜(ˆ▽ˆ)
(疯狂暗示 点赞 !关注!转发 !!! 点赞 !关注!转发 !!!)
- 您的支持是罡罡同学前进的最大动力!



