1、两个正整数相乘7. void print(long c,int flag) 功能说明:打印带符号flag(1为负)的long c数组8. int write(long a,int flag) 将键盘敲入的数字按4位一组放入long a,且将符号放入flag9. void mul(long a,int first,int last,long b,long c) 乘法,a的第last到first位乘以b,答案放到c10. int compara(long a,int first,int last,long b) 比较数组a,b大小,first last分别为a的最高最低位11. int minus
2、d(long a,int first,int last,long b,long c,int flag) a为被减数,first last为a最高最低位,b为减数,c为差,flag为符号12. void div(long a,long b,long c,int fa) 除法,a除以b的值放入c,fa为a符号13. void menu() 打印菜单函数14. void main() 主函数,调用其余函数,计算相应功能的值并输出。5.源程序:#includemath.hstdio.h#define MAX 40 /可以修改,此时最大运算位数为四十位#define N 10 /此处应为最大位数除以4v
3、oid init(int a,int b,int *p1,int *p2) /输入 int i,j; char r,s; for(i=0;i0&j0;i-,j-,k+) dk=ai+bj+dk; if(dk9) dk+1+;dk=dk-10; while(i0) dk=dk+ai;9) k+; i-; while(j dk=dk+bj; if(dk dk+1+; k+; j-; d0=a0+b0; c0=d0; if(dk=0) k-; for(i=1;ki+,k-) ci=dk; return(i);void change(int a,int b,int m,int n) /变号运算 int
4、 cMAX; if(m=n&b0=45) ci=ai; for(i=1,j=1;ja0=45) a0=0; b0=45;int minus(int a,int b,int d,int m,int n) /减法运算 int cMAX=0,i,j,k; di=0;i-,j-,k+) if(ck0|aibj) ck=ck+ai-bj; if(ck0) ck+=10; ck+1-; else ck=ai-bj; ck=ck+ai; if(ck ck+=10; ck+1-;i-; ck=ai+ck; while(ck=0&i+) di=ck-;void minusfun(int a,int b,int
5、d,int m,int n) /判断是否两异号数相加 int i,j,f=0,g=0; if(b0!=0) printf(- printf(%d,bi); printf(n if(a0!=0),ai); if(m=n) if(aia0=45) g=1; if(ai!=bi) f=1; if(f=0)0n if(g=1) change(a,b,m,n); j=minus(a,b,d,n,m);j;i+) printf(,di);return; else if(a0=45&b0=0) j=minus(b,a,d,n,m); else j=minus(a,b,d,m,n);n&b0=45) retu
6、rn;a0=45) j=minus(b,a,d,n,m);int multi(int a,int b,int c,int m,int n) /正整数乘法运算 int dMAX=0,eMAX=0,i,j,k,r,s,x,y; ci=0;=n) for(i=m-1,s=1;i-,s+) for(r=0;rn) for(j=n-1,s=1;j-,s+) dr=0; for(i=m-1,k=1*s;i-,k+) dk+1=dk+1+dk/10; dk=dk%10; return(x);void print(long c,int flag) /输出 int i; for(i=N-1;=0;i-) if(
7、ci) break; if(flag) %4d,ci-); for(;i-) if(ci/1000) %4ld,ci); else if(ci/100) 0%3ld else if(ci/10) 00%2ld 000%1ldint write(long a,int flag) /将键盘敲入的数字按4位一组放入long a,且将符号放入flag char numN*4; char temp; int i,j,k;N*4; numi=getchar(); if(numi=10) i-; break; if(numi=45) flag=(flag+1)%2; k=0; for(j=0;=i/2; t
8、emp=numj; numj=numi-k; numi-k=temp; k=1;=i;j+) switch(k)case 1:aj/4+=(long)(numj-48);case 2:aj/4+=(long)(numj-48)*10;case 3:aj/4+=(long)(numj-48)*100;case 4:aj/4+=(long)(numj-48)*1000; return flag;void mul(long a,int first,int last,long b,long c) /乘法 int max_i; long temp; for(max_i=N-1;max_imax_i-)
9、if(bmax_i)=max_i; if(bi) for(j=first;=last; temp=aj*bi; ci+j-first+=temp%10000; ci+j-first+1+=(temp/10000)+(ci+j-first/10000); ci+j-first=ci+j-first%10000;int compara(long a,int first,int last,long b) /比较数组a,b大小 int flag=2; int k=0; int len; for(len=N-1;lenlen-) if(blen) if(first-last)=len) if(first
10、-last)len) flag=1; else for(i=len; if(afirst-kbi) flag=1; break; if(afirst-k flag=0; else flag=0; return flag;int minusd(long a,int first,int last,long b,long c,int flag) int notchange; int i,k=0; int max; notchange=compara(a,first,last,b); if(notchange) for(i=last;=first; if(aimax-) if(bmax) break;
11、 for(i=0;=max; if(bilen_a-) if(alen_a) k=len_a; while(compara(a,len_a,0,b) while(!compara(a,len_a,k,b) k-; ck=1; mul(c,k,k,b,result); while(compara(a,len_a,k,result) ck+; for(i=N-1; resulti=0; mul(c,k,k,b,result); ck-; for(i=N-1; resulti=0; minusd(a,len_a,k,result,a,0); for(len_a=N-1; if(alen_a) break; k=len_a;void menu() /菜单=大整数计算器=1.加法 2.减法 3.乘法 4.除法 0.退出n请从14中选择:void main() /主函数 int flag; int fa; int fb; long adN,bdN,cd2*N; int aMAX=0,bMAX=0,cMAX=0,dMAX=0; char s; int m,n,i,j; int *p1,*p2; p1=& p2=& menu(); getchar(); w
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1