一.前言
如上
二.内容
在科学计算中,无法计算非常大的整数,于是就有大整数乘法问题。
(int存放4字节,float…已有的数据类型数据范围有限),硬件无法实现,只能靠软件(代码)实现了。
三.代码 #include<stdio.h>#include<string.h>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) { // 删除前导符0len_result--;}for(i=len_result;i>=0;i--) {printf("%d",result[i]) ;}return 0;}