大整数乘法---C语言实现

时间:2025-03-15 07:23:51

一.前言

如上

二.内容

在科学计算中,无法计算非常大的整数,于是就有大整数乘法问题。
(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;
}