C语言实现大整型数据乘法

来源:互联网 发布:linux解压命令zip 编辑:程序博客网 时间:2024/05/16 05:17

学过C语言的都知道,在vc环境下,最大的整数是四个字节,如果程序要计算更大的数据,采用传统的方法必然会溢出。得到不是预期的结果,前几天在课堂上布置了一个求任意长度整数的阶乘,对于较小的数据,可以采用递归的算法即:f(n)=n*f(n-1)几行代码即可搞定,但是在大整形的情况之下,则乘法的算法得重新实现。下面给出代码,仅供参考。

     算法思想:模拟人工竖式计算,n位数乘以m位数,得到m+n位数 或者 m+n-1位数,用数组实现!

#include<stdio.h>#include<string.h>#include<stdlib.h>typedef struct result{int *sum;int length;}result;char *fact(char *,char *);void main(){printf("%s",fact("155555555555555555551","18888888888888888881"));printf("\n");}char *fact(char *p1,char *p2){int length1=strlen(p1);int length2=strlen(p2);result *s=(result* )malloc(sizeof(result));s->sum=(int *)malloc((length1+length2)*sizeof(int));//存放最终的结果s->length=length1+length2;int temp=0;//存放被乘数的每一位与乘数的每一位的乘积for(int k1=0;k1<=length1+length2-1;k1++){s->sum[k1]=0;}for(int i=length2-1;i>=0;i--){for(int j=length1-1;j>=0;j--){temp=(p2[i]-48)*(p1[j]-48);s->sum[i+j+1]+=temp;s->sum[i+j]+=s->sum[i+j+1]/10;s->sum[i+j+1]=s->sum[i+j+1]%10;}}for(int i1=0;i1<s->length;i1++){if(s->sum[i1]!=0){s->sum+=i1;s->length-=i1;break;}}char *str=(char*)malloc(s->length+1);for(int i2=0;i2<s->length;i2++){str[i2]=(char)(s->sum[i2]+48);}str[i2]='\0';return str;}


程序可以根据自己的需要在进行修改!

 

 

原创粉丝点击