大数的运算(加减乘除)C代码
发布时间:2020-12-14 03:36:06 所属栏目:大数据 来源:网络整理
导读:? 题目:一般数的加减乘除很好计算,如果超过了8为数,那么int就无能为力了。以前老是让做过大数的加法,但那时年少无知,没有去做,貌似当时的作业都没完成。这几天心血来潮,对着个问题有感兴趣。当然这是编程路上必须走的路。下面就献上我的代码。 分析:
? 题目:一般数的加减乘除很好计算,如果超过了8为数,那么int就无能为力了。以前老是让做过大数的加法,但那时年少无知,没有去做,貌似当时的作业都没完成。这几天心血来潮,对着个问题有感兴趣。当然这是编程路上必须走的路。下面就献上我的代码。 分析: ? ? ? ?大数的运算,说大数,那就不能用简单的数据类型能解决的。我想到的是用数组存储数据。 ? ? ? ?大概思路:说先义字符的形式把数输入到数组中,然后在将字符数组转换成整型的。然后对这些书进行操作。 比较大小:这个简单,把数组的每一位(从高到低)进行比较就行了。 ?加法:将每一位进行相加,有进位的进行进位,后面相加时要加上进位。没有进位的直接就加起来。如果位数相等,直接相加就好了,如果位数不等,则把多余的部分直接放在结果中。 除法和乘法还没做完,以后补上。 ?代码不够简洁,有更好的代码的,可以拿来进行分享。 下面就是代码:
#define MAX 1000 #include<stdio.h> void add(int *a,int *b,int nNuma,int nNumb); void plus(int *a,int nNumb); bool compare(int *a,int nNumb); int main() { int nNuma,nNumb; nNuma=0; nNumb=0; int i; char c1,c2; char a1[MAX],b1[MAX]; int a[MAX],b[MAX]; printf("请输入第一个数n"); for(i=0;;i++) { nNuma++; scanf("%c",&c1); a1[i]=c1; if(c1=='n') { nNuma--; break; } } printf("请输入第二个数n"); for(i=0;;i++) { nNumb++; scanf("%c",&c2); b1[i]=c2; if(c2=='n') { nNumb--; break; } } for(i=0;i<nNuma;i++) { a[i]=a1[i]-'0'; } for(i=0;i<nNumb;i++) { b[i]=b1[i]-'0'; } add(a,b,nNuma,nNumb); if(compare(a,nNumb)) printf("a>=bn"); else printf("a<bn"); plus(a,nNumb); return 0; } //大数减法 void plus(int *a,int nNumb) { int i,h; int k=0; int c[MAX]; //int ma[MAX]; int na,nb; int *ma; int *mb; na=nNuma; nb=nNumb; ma=a; mb=b; if(!compare(a,nNumb)) { ma=b; mb=a; na=nNumb; nb=nNuma; } for(;nb-1>=0;na--,nb--) { if(ma[na-1]<mb[nb-1]) { ma[na-2]--; h=10; } else h=0; c[k]=ma[na-1]-mb[nb-1]+h; //h为借位 k++; } if(ma[na-1]<mb[nb-1]) { ma[na-2]--; h=10; } else h=0; if(na-1>=0) { for(i=nb-1;i>=0;k++,i--) c[k]=ma[i]; } printf("差为: "); if(!compare(a,nNumb)); else printf("-"); for(int j=k-1;j>=0;j--) printf("%d",c[j]); printf("n"); } //大数加法 void add(int *a,int nNumb) { int i,h,t; h=0; int k=0; int c[MAX]; int na=nNuma; int nb=nNumb; for(;na-1>=0&&nb-1>=0;na--,nb--) { t=a[na-1]+b[nb-1]+h; c[k]=t%10; h=t/10; k++; } if(t>=10) h=t/10; else h=0; if(na==nb) { c[k]=h;k++; } if(na-1>=0) { for(i=na-1;i>=0;k++,i--) { c[k]=a[i]+h; h=0; } } if(nb-1>=0) { for(i=nb-1;i>=0;k++,i--) { c[k]=b[i]+h; h=0; } } printf("差为: "); for(int j=k-1;j>=0;j--) printf("%d",c[j]); printf("n"); } bool compare(int *a,int nNumb) { int i=0; bool sign; int na=nNuma; int nb=nNumb; if(na>nb) sign=true; else if(na==nb) { while(a[i]==b[i]) i++; if(a[i]<b[i]) sign=false; //a[]小于b[] else sign=true; } else if(na<nb) //nb>na sign=false; return sign; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |