c语言除法算不出,求C语言写一段代码(关于除法)

根据:

2进制完成除法运算就是移位和相减,比如1011011除以1110顺序如下:

1   -   1110   不够减,   结果添0,   1左移一位再加上原来1后的0,为10

10   -   1110   不够减,   结果添0,   10左移一位再加上原来10后的1,为101

101   -   1110   不够减,   结果添0,   101左移一位再加上原来101后的1,为1011

1011   -   1110   不够减,   结果添0,   1011左移一位再加上原来1011后的0,为10110

10110   -   1110   =   1000     结果添1,同上左移加原来10110后的1得   10001

10001   -   1110   =   11         结果添1,同上左移加原来101101后的1得   111

111   -   1101   不够减,结果添0,此时1011011所有位都已移完,运算完毕

即   1011011   =   1110   *   0110   +   111

也即   91   =   14   *   6   +   7

由于你相除的两个数放在两个数组中,比如A[]与B[],要模拟这种运算的话就需要能不

断地从A中取出其二进制的高位,添加到一个当前值的数组C[]中,而实际进

行运算的就是C与B。数组单元的类型必然是多位的,你必须要实现做到对数组C[]左移

一位的操作,剩下的就是判断C够不够减B(即C数组的数是不是比B大)了。

至于左移,我想大家都想到了,其实C和B是倒序存放的,以数组单元为8位为例,

C[0]存放着C的最低8位,用表达式表示就是   C[0]   =   C   &   0xff,   C[1]   =   C   &   0xff00,   ...

这样当移位时,只要保留当前单元C[i]的最高位,即h   =   C[i]   > >   7,然后直接对

C[i]左移一位即   C[i]  b[i])

return 1;

else if (a[i]

您可能感兴趣的文章:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一段C语言大数除法代码: ``` #include <stdio.h> #include <string.h> #define MAX_DIGITS 1000 int dividend[MAX_DIGITS], divisor[MAX_DIGITS], quotient[MAX_DIGITS], remainder[MAX_DIGITS]; void divide(int dividend[], int divisor[], int quotient[], int remainder[]) { int i, j; int dividend_len = strlen(dividend); int divisor_len = strlen(divisor); for (i = 0; i < dividend_len; i++) { remainder[i] = dividend[i] - '0'; } int remainder_len = dividend_len; while (remainder_len > 0 && remainder[remainder_len - 1] == 0) { remainder_len--; } if (remainder_len < divisor_len) { quotient[0] = 0; return; } int shift = remainder_len - divisor_len; for (i = divisor_len - 1; i >= 0; i--) { divisor[i + shift] = divisor[i]; } for (i = 0; i < shift; i++) { divisor[i] = 0; } divisor_len = remainder_len; while (shift >= 0) { int d = 0; while (d < 10 && memcmp(divisor, remainder, divisor_len) <= 0) { d++; for (i = divisor_len - 1; i >= 0; i--) { remainder[i + 1] = remainder[i]; } remainder_len++; remainder[0] = 0; for (i = 0; i < divisor_len; i++) { remainder[i] += divisor[i]; if (remainder[i] > 9) { remainder[i] -= 10; remainder[i + 1]++; } } } quotient[shift] = d - 1; for (i = 0; i < divisor_len; i++) { remainder[i] -= divisor[i]; if (remainder[i] < 0) { remainder[i] += 10; remainder[i + 1]--; } } while (remainder_len > 0 && remainder[remainder_len - 1] == 0) { remainder_len--; } shift--; } } int main() { char dividend_str[MAX_DIGITS]; char divisor_str[MAX_DIGITS]; printf("Enter dividend: "); scanf("%s", dividend_str); printf("Enter divisor: "); scanf("%s", divisor_str); divide(dividend_str, divisor_str, quotient, remainder); printf("Quotient: "); int i = MAX_DIGITS - 1; while (i > 0 && quotient[i] == 0) { i--; } for (; i >= 0; i--) { printf("%d", quotient[i]); } printf("\n"); printf("Remainder: "); i = MAX_DIGITS - 1; while (i > 0 && remainder[i] == 0) { i--; } for (; i >= 0; i--) { printf("%d", remainder[i]); } printf("\n"); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值