c语言实现

时间: 2023-07-13 10:13:28 浏览: 37
好的,下面是使用C语言实现的代码,实现两个长整数的除法和求余操作: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LEN 1000 void strrev(char *str) { int len = strlen(str); for (int i = 0; i < len / 2; i++) { char temp = str[i]; str[i] = str[len - i - 1]; str[len - i - 1] = temp; } } void divmod(char *a, char *b, char *q, char *r) { int n = strlen(a); int m = strlen(b); char *A = (char*) malloc(sizeof(char) * (n + 1)); char *B = (char*) malloc(sizeof(char) * (m + 1)); strcpy(A, a); strcpy(B, b); strrev(A); strrev(B); int *x = (int*) malloc(sizeof(int) * (n + 1)); int *y = (int*) malloc(sizeof(int) * (m + 1)); for (int i = 0; i < n; i++) { x[i] = A[i] - '0'; } for (int i = 0; i < m; i++) { y[i] = B[i] - '0'; } int *q1 = (int*) malloc(sizeof(int) * (n + 1)); int *r1 = (int*) malloc(sizeof(int) * (n + 1)); memset(q1, 0, sizeof(int) * (n + 1)); memset(r1, 0, sizeof(int) * (n + 1)); for (int i = n - 1; i >= 0; i--) { // shift r one bit to left for (int j = n - 1; j >= 0; j--) { r1[j + 1] = r1[j]; } r1[0] = x[i]; // binary search to find the quotient int l = 0, r = 9; while (l < r) { int mid = (l + r + 1) / 2; int flag = 1; for (int j = m - 1; j >= 0; j--) { int t = y[j] * mid + r1[j]; if (t >= 10) { flag = 0; break; } } if (flag) { l = mid; } else { r = mid - 1; } } // subtract y * l from r for (int j = m - 1; j >= 0; j--) { int t = y[j] * l; r1[j] -= t; r1[j + 1] -= r1[j] < 0; r1[j] += r1[j] < 0 ? 10 : 0; } q1[i] = l; } // copy the result to q and r int i, j; for (i = n - 1; i >= 0; i--) { if (q1[i] != 0) break; } if (i < 0) { q[0] = '0'; q[1] = '\0'; } else { for (j = 0; j <= i; j++) { q[j] = q1[i - j] + '0'; } q[j] = '\0'; } for (i = n - 1; i >= 0; i--) { if (r1[i] != 0) break; } if (i < 0) { r[0] = '0'; r[1] = '\0'; } else { for (j = 0; j <= i; j++) { r[j] = r1[i - j] + '0'; } r[j] = '\0'; } free(A); free(B); free(x); free(y); free(q1); free(r1); } int main() { char a[MAX_LEN]; char b[MAX_LEN]; char q[MAX_LEN]; char r[MAX_LEN]; printf("Enter the first number: "); scanf("%s", a); printf("Enter the second number: "); scanf("%s", b); divmod(a, b, q, r); printf("Quotient: %s\n", q); printf("Remainder: %s\n", r); return 0; } ``` 注意,这里使用了高精度计算方法,需要动态分配内存来存储数字的每一位。另外,这里的除法操作是整除,即只保留商的整数部分,并且不进行四舍五入。如果需要实现浮点数除法,还需要进行额外的处理。

相关推荐

最新推荐

recommend-type

C语言实现餐饮结账管理系统

主要为大家详细介绍了C语言实现餐饮结账管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

CRC4的C语言实现代码

这里给大家分享一个函数,实现DSP通讯中的CRC4校验 。特征码为0x13。
recommend-type

C语言实现哈夫曼树的构建

主要为大家详细介绍了C语言实现哈夫曼树的构建,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

超简单的ntrip客户端C语言实现.docx

NTRIP协议是基于HTTP实现的,各种硬件的TCP连接不一样,所以TCP的连接,文件中不包含。
recommend-type

C语言实现歌手大奖赛计分程序

主要为大家详细介绍了C语言实现歌手大奖赛计分程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

SPDK_NVMF_DISCOVERY_NQN是什么 有什么作用

SPDK_NVMF_DISCOVERY_NQN 是 SPDK (Storage Performance Development Kit) 中用于查询 NVMf (Non-Volatile Memory express over Fabrics) 存储设备名称的协议。NVMf 是一种基于网络的存储协议,可用于连接远程非易失性内存存储器。 SPDK_NVMF_DISCOVERY_NQN 的作用是让存储应用程序能够通过 SPDK 查询 NVMf 存储设备的名称,以便能够访问这些存储设备。通过查询 NVMf 存储设备名称,存储应用程序可以获取必要的信息,例如存储设备的IP地址、端口号、名称等,以便能
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。