欢迎来到天天文库
浏览记录
ID:28591906
大小:64.04 KB
页数:5页
时间:2018-12-11
《超长整型数据的存储与运算c代码》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、#include#include#include#include#defineMAX101voidsub(inta[],intb[],intp);//函数功能:利用字符串实现超长整数减法运算intla,lb,ra=1,rb=1;/*把la,lb设为全局变量,la纪录第一个超长整型数组的位数,lb纪录第二个超长整型数组的位数*/charc1[MAX],c2[MAX];/*纪录需要计算的两个超长整型数据*/voidinput(inta1[],inta
2、2[])/*函数input为输入函数,用来纪录两个待计算的超长整型数据,以数组首地址为参数.以实现返回两个超长整型数据*/{inti,a=1,b=1;printf("请输入第一个数:");scanf("%s",c1);printf("请输入第二个数:");/*输入两个超长整型数据*/scanf("%s",c2);la=strlen(c1);/*la纪录c1的位数*/lb=strlen(c2);/*lb纪录c2的位数*/if(c1[0]=='-'){la--;ra=-1;a=0;}/*判断数组的符号*/if(c2
3、[0]=='-'){lb--;rb=-1;b=0;}for(i=0;i0
4、
5、p){if(la>lb)d=la;elsed=lb;/*用d纪录结果的最大位数*/for(i=0;
6、i7、8、ra<0)printf("-");for(i=d-1;i>=0;i--)printf("%d",c[i]);/*输出结果*/}elsesub(a,b,1);}voidsub(inta[],intb[],intp)/*超长整数减法运算*/{inti,h=0,c9、[MAX+1]={0},d;if(ra*rb>010、11、p){if(la>lb)d=la;else/*用d纪录结果的最大位数*/{d=lb;for(i=d;a[i]<=b[i]&&i>=0;i--)if(a[i]12、+1]--;b[i]+=10;}c[i]=b[i]-a[i];}while(!c[d-1]&&d>1)d--;/*判断最后结果的位数*/if(p&&(ra>0&&h13、14、ra<0&&!h)15、16、ra>0&&(rb>0&&h17、18、h&&!p))printf("-");if(ra<0&&rb<0&&!h)printf("-");/*如果h为真是输出负号*/for(i=d-1;i>=0;i--)printf("%d",c[i]);}elseadd(a,b,1);}voidmult(inta[],intb[])/*超长整数乘法运算*19、/{inti,j,c[2*MAX]={0},d;d=la+lb-1;/*用d纪录结果的最大位数*/for(i=0;i=0;i--)printf("%d",c[i]);/*输出结果*20、/}//比较两个用字符串存储的超长正整数的大小,若a>b,返回1;a==b,返回0;a
7、
8、ra<0)printf("-");for(i=d-1;i>=0;i--)printf("%d",c[i]);/*输出结果*/}elsesub(a,b,1);}voidsub(inta[],intb[],intp)/*超长整数减法运算*/{inti,h=0,c
9、[MAX+1]={0},d;if(ra*rb>0
10、
11、p){if(la>lb)d=la;else/*用d纪录结果的最大位数*/{d=lb;for(i=d;a[i]<=b[i]&&i>=0;i--)if(a[i]
12、+1]--;b[i]+=10;}c[i]=b[i]-a[i];}while(!c[d-1]&&d>1)d--;/*判断最后结果的位数*/if(p&&(ra>0&&h
13、
14、ra<0&&!h)
15、
16、ra>0&&(rb>0&&h
17、
18、h&&!p))printf("-");if(ra<0&&rb<0&&!h)printf("-");/*如果h为真是输出负号*/for(i=d-1;i>=0;i--)printf("%d",c[i]);}elseadd(a,b,1);}voidmult(inta[],intb[])/*超长整数乘法运算*
19、/{inti,j,c[2*MAX]={0},d;d=la+lb-1;/*用d纪录结果的最大位数*/for(i=0;i=0;i--)printf("%d",c[i]);/*输出结果*
20、/}//比较两个用字符串存储的超长正整数的大小,若a>b,返回1;a==b,返回0;a
此文档下载收益归作者所有