首页 > 编程知识 正文

大整数乘法C语言,C语言大数乘法

时间:2023-05-06 03:16:09 阅读:240483 作者:3770

一.前言

如上

二.内容

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。