C语言大数相减
发布时间:2020-12-14 02:47:55 所属栏目:大数据 来源:网络整理
导读:C语言大数相减操作跟大数相加操作类似,也是按位相减,并保留一个借位标志carry,如果carry为1表示有借位,在执行相减操作之前,先判断被减数和减数的大小,总是用大数减去小数,如果减数大于被减数,则用减数减去被减数,然后再加上负号“-”,这样比较简单
C语言大数相减操作跟大数相加操作类似,也是按位相减,并保留一个借位标志carry,如果carry为1表示有借位,在执行相减操作之前,先判断被减数和减数的大小,总是用大数减去小数,如果减数大于被减数,则用减数减去被减数,然后再加上负号“-”,这样比较简单。 下面程序有两个函数,第一用于判断两个数的大小,另一个是用大数减去小数。如果问题请提出来,相互学习。 #include <stdio.h> #include <string.h> int comp(const char *a,const char *b); //返回1表示a>b,返回-1表示a<b,返回0表示a==b int sub(const char *a,const char *b,char *c); //执行相减操作,a>b int main(){ char a[100],b[100]; char c[101]; int k,comp_res; printf("enter first number: "); //输入数字,低下标是数的高位 gets(a); printf("enter second number: "); gets(b); comp_res = comp(a,b); //比较两个数大小 if(comp_res==0){ //如果两个数相等,打印0 printf("0n"); return 0; } if(comp_res==1){ //第一个数大 k = sub(a,b,c); }else{ //第二个数大 k = sub(b,a,c); printf("-"); //打印负号 } while(k>=0){ printf("%c",c[k]); k--; } printf("n"); return 0; } //返回1表示a>b,返回-1表示a<b,返回0表示a==b int comp(const char *a,const char *b){ int alen = strlen(a); int blen = strlen(b); int i=0; if(alen>blen){ return 1; }else if(alen<blen){ return -1; }else{ while(a[i]==b[i] && i<alen){ i++; } if(i==alen){ return 0; }else if(a[i]>b[i]){ return 1; }else{ return -1; } } } //执行a-b,将结果存入c中,a>b int sub(const char *a,char *c){ int alen,blen; int carry = 0; int temp; int i,j,k; alen = strlen(a); blen = strlen(b); i = alen-1; j = blen-1; k = 0; while(j>=0){ temp = a[i]-b[j]-carry; // temp=(a[i]-'0')-(b[i]-'0')-carry if(temp<0){ temp += 10; carry = 1; }else{ carry = 0; } c[k] = temp+'0'; i--; j--; k++; } while(i>=0){ temp = a[i]-'0'-carry; if(temp<0){ temp += 10; carry = 1; }else{ carry = 0; } c[k] = temp+'0'; i--; k++; } //因为假设被减数大于减数,所以最终carry一定为0,此处不需要判断进位是否为0,将k-1,表示结果的最高位 k--; while(c[k]=='0')k--; return k; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |