一.前言
如上
二.内容
在科学计算中,无法计算非常大的整数,于是就有大整数乘法问题。
(int存放4字节,float…已有的数据类型数据范围有限),硬件无法实现,只能靠软件(代码)实现了。
三.代码
#include<>
#include<>
int main(){
int i,j;//循环变量
char char1[256],char2[256];//存放两个大整数的字符
int int1[256],int2[256];//按低位到高位存放两个大整数的数组
int result[256];//乘积结果数组 ,按低位到高位存放
int d;//进位
int b;//存放按位乘的结果
int m;//结果数组的下标
int len_result;
//获取两个大整数
gets(char1);
gets(char2);
//按低位到高位存放两个大整数
for(i=0,j=strlen(char1)-1;i<strlen(char1);i++,j--){
int1[j]=char1[i]-48;
}
for(i=0,j=strlen(char2)-1;i<strlen(char2);i++,j--){
int2[j]=char2[i]-48;
}
//将结果数组赋初值
for(i=0;i<256;i++){
result[i]=0;
}
//char字符数组长度等于对应的int字符数组长度
//模拟竖式相乘
for(i=0;i<strlen(char2);i++){
d=0;//一开始相乘,进位为0
m=i;
for(j=0;j<strlen(char1);j++){
b=int2[i]*int1[j]+d+result[m];
result[m]=b%10;//本位
m++;//为下一次做准备
d=b/10;//进位
}
if(d>0){//一次相乘,最后一次的进位
result[m]=d;
}
}
//输出结果
len_result=strlen(char1)+strlen(char2);
while(result[len_result]==0&&len_result>0) { // 删除前导符0
len_result--;
}
for(i=len_result;i>=0;i--) {
printf("%d",result[i]) ;
}
return 0;
}