1、int Compare(char a,char b)/比较字符串的大小,方法不同于strcmp函数,类似于整型常量的比较 int lena,lenb,i; lena=strlen(a); lenb=strlen(b); if(lena return 1; else if(strcmp(a,b)=0) else for(i=0;lena; if(aibi) return 1; if(ailenb?lena: di=ai+bi+di; di+1=di+1+di/10; di=di%10; /若高位进 while(dk) k+; while(!dk-1) k-;/001+0003=4 /将整型数组逆
2、着转变并赋值给c字符型数组 for(j=0;j=0) /若被减数大于等于减数 for(i=0; ai=a1lena-1-i- bi=b1lenb-1-i- flag=0;/结果正的标志 /若被减数小于减数 ai=b1lenb-1-i- bi=a1lena-1-i- flag=1;/结果负的标志 /大数减小数 if(ai9) /若最后一个元素大于 ai=ai-1/10; i+; /将得到的整型数组逆置赋给字符串i; cj=ai-j-1+ if(Judge(c)/若积全为,则只输出一个/高精度乘法-高精度乘以高精度void BigNumMultiBig(char a1,char b1) int a
3、1000=0,b1000=0,d2000=0; bi=b1lenb-i-1- /计算乘数从低位到高位以此乘以被乘数的低位到高位 for(j=0; di+j=di+j+ai*bj; di+j+1+=di+j/10; di+j=di+j%10; /根据高位是否为判断整型数组的位数 k=lena+lenb; while(! k-; /积转化为字符型 ci=dk-1-i+ if(Judge(c)/若积全为,则只输出一个 strcpy(c,/整型常量的阶乘void BigNumFact(int x) int i,k,m=0,a1000=0; a0=1; for(;x;x-) /m为在求阶乘过程中a的元素
4、个数 for(k=i=0;=m; k=k+ai*x;/数组各个元素均乘以x(x递减),以完成阶乘的运算 ai=k%10; k/=10; while(k) a+m=k%10; /阶乘的结果转化为字符型 ci=am-i+ if(Judge(c)/若结果全为,则只输出一个/1-整型常量的阶乘和void BigNumFactAdd(int t) int i; char sum2000,d2000; /对字符串进行初始化 memset(d,0,sizeof(d); memset(sum,0,sizeof(sum); /分别求出相应i的阶乘然后相加 for(i=t;i0;i-) BigNumFact(i)
5、; strcpy(d,c); memset(c,0,sizeof(c); BigNumberAdd(d,sum); strcpy(sum,c); strcpy(c,sum);/将结果赋值给全局变量,进行输出/高精度的乘方,幂数为整型常量void BigNumInvol(char a1,int b1) char temp1000; strcpy(temp,a1);/注意乘方是自己乘自己,而不是结果乘结果 for(i=2;b1; BigNumMultiBig(a1,temp); strcpy(temp,c);/将c清空,防止出现错误 /进行最后一次乘法 BigNumMultiBig(a1,temp
6、); /高精度除法-高精度除以低精度,只产生余数int BigNumDividSmall(char a1,int b1)b1) return 0; int i,j,k,flag=0,a1000=0; char b2000; memset(b,0,sizeof(b); k=strlen(a1); ai=a1i- z=0; z=ai+z*10;/除法过程 bi=z/b1+ z=z%b1; i=j=0; while(bi+= for(i=i-1; cj+=bi;/高精度除法-高精度除以高精度,只产生余数void BigNumDividBig(char a1,char b1) char a1000,b
7、1000,time1000; int lena1,lentime,i,j,k,flag=0; memset(arr,0,sizeof(arr); /若被除数小于除数,则商为0,余数为被除数 if(Compare(a1,b1) BigNumberSub(b,b1); strcpy(b,c); memset(c,0,sizeof(c); timelentime+; flag=1;/控制time的元素的位置 if(flag)/将商转换为字符 timelentime+= else/当被除数前几位小于除数,商补0 timelentime=strcmp(b,)/若b为 j=0; else/继续在b的后面加
8、值 j=strlen(b); lentime+; k=0;lentime; if(timei! break;/找到time数组中第一个不为0的位置 for(j=i; ck+=timej; strcpy(arr,b); if(Judge(c) if(Judge(arr) strcpy(arr,int main() int flag=0,a3,k,i; char a21000,b21000; printf(说明:该程序适用于正整数的高精度运算,并且运算结果的位数在位以内。n while(1) printf(/*/n1、两数相加n2、两数相减n3、大数与低精度相乘n4、大数与大数相乘n5、大数的阶乘
9、n6、大数的阶乘和n7、大数的乘方n8、大数除以低精度n9、大数除以大数n10、退出n请输入你想要进行的操作数: scanf(%d,&k); getchar(); switch(k) case 1: printf(请输入您想要进行运算的两个数字: scanf(%s%s,a2,b2); BigNumberAdd(a2,b2);%s+%s=%snn,a2,b2,c); break; case 2: BigNumberSub(a2,b2);%s-%s=%snn case 3:%s%d,a2,&a3); BigNumMultiSmall(a2,a3);%s*%d=%snn,a2,a3,c); case
10、 4: BigNumMultiBig(a2,b2);%s*%s=%snn case 5:请输入您想要的阶乘数: BigNumFact(a3);%d!=%snn,a3,c); case 6:a3) printf(0!=1nn BigNumFactAdd(a3); for(i=1;=a3;,i); if(i!=a3) printf(+,c); case 7: BigNumInvol(a2,a3);%s%d=%snn case 8: if(BigNumDividSmall(a2,a3) if(!z)%s/%d=%snn else%s/%d=%s%ldnn,a2,a3,c,z); else0不能作除数。nn case 9: if(Judge(b2) BigNumDividBig(a2,b2);Judge(arr)%s/%s=%s%snn,a2,b2,c,arr);%s/%s=%snn case 10: flag=1;感谢您的使用,再见。 default:对不起,您的输入有误,请重新输入。 if(flag) return 0;代码效果展示
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1