求长度不同的两个整形数组作除法的值c语言
时间: 2023-07-15 21:14:21 浏览: 90
可以按照以下步骤实现:
1. 定义两个整型数组,分别存放被除数和除数。
2. 计算两个数组的长度,分别存放在变量len1和len2中。
3. 判断除数是否为0,如果为0则输出错误信息并结束程序。
4. 如果被除数小于除数,则商为0,余数为被除数。
5. 定义一个整型数组,用来存放商,长度为len1-len2+1。
6. 从高位到低位遍历被除数数组,每次取len2个数进行除法运算,得到商和余数,将商存放在商数组中,余数作为下一次运算的被除数。
7. 最后输出商数组即可。
以下是示例代码:
```c
#include <stdio.h>
int main()
{
int dividend[] = {1, 2, 3, 4, 5}; // 被除数
int divisor[] = {2, 3, 4}; // 除数
int len1 = sizeof(dividend) / sizeof(int); // 被除数长度
int len2 = sizeof(divisor) / sizeof(int); // 除数长度
if (len2 == 0) {
printf("Error: divisor cannot be zero!\n");
return 0;
}
if (len1 < len2) {
printf("The quotient is 0, the remainder is ");
for (int i = 0; i < len1; i++) {
printf("%d", dividend[i]);
}
printf("\n");
return 0;
}
int quotient[len1 - len2 + 1]; // 商数组
int remainder[len2]; // 余数数组
int temp[len2]; // 临时被除数数组
// 初始化余数数组
for (int i = 0; i < len2; i++) {
remainder[i] = dividend[i];
}
// 从高位到低位遍历被除数数组
for (int i = 0; i <= len1 - len2; i++) {
// 取len2个数作为临时被除数
for (int j = 0; j < len2; j++) {
temp[j] = remainder[j];
}
// 计算商和余数
int q = 0, r = 0;
while (1) {
int flag = 0;
for (int j = len2 - 1; j >= 0; j--) {
if (temp[j] == 0 && flag == 0) {
continue;
}
flag = 1;
if (temp[j] < divisor[j]) {
if (j > 0 && temp[j - 1] == 0) {
continue;
}
temp[j - 1] = temp[j - 1] * 10 + temp[j];
temp[j] = 0;
}
q = temp[j] / divisor[j];
r = temp[j] % divisor[j];
temp[j] = r;
}
if (flag == 0) {
break;
}
}
quotient[i] = q;
// 更新余数数组
for (int j = 0; j < len2 - 1; j++) {
remainder[j] = temp[j + 1];
}
remainder[len2 - 1] = dividend[i + len2];
}
// 输出商数组
printf("The quotient is ");
for (int i = 0; i < len1 - len2 + 1; i++) {
printf("%d", quotient[i]);
}
printf(", the remainder is ");
for (int i = 0; i < len2 - 1; i++) {
printf("%d", remainder[i]);
}
printf("\n");
return 0;
}
```
需要注意的是,在除法运算中,需要考虑很多特殊情况,比如被除数和除数为0、被除数小于除数等等,所以代码中需要进行一些特判。
阅读全文