题目描述 Description c语言高精度做吐了吧? 来试试c语言计算((a+b)*c-d)/e 注意除法是整除 输入描述 Input 多组输入,每行一组数据都为整数 输入的数据不含前导0 输出描述 Output 对于每一组输入,输出 ((a+b)*c-d)/e的结果,你不应该输出前导0 ,每行一个结果(要给c语言代码!!!)

时间: 2023-06-15 14:05:20 浏览: 55
以下是使用 C 语言实现的高精度计算 ((a+b)*c-d)/e 的代码: ```c #include <stdio.h> #include <string.h> #define MAX_DIGITS 1000 // 大数结构体 typedef struct { int digits[MAX_DIGITS]; // 存储每一位数字 int len; // 数字长度 } BigNum; // 初始化大数 void init(BigNum *num) { memset(num->digits, 0, sizeof(num->digits)); num->len = 0; } // 从字符串中读取大数 void read(BigNum *num, char *str) { init(num); int len = strlen(str); for (int i = len - 1, j = 0, k = 0; i >= 0; i--) { num->digits[j] += (str[i] - '0') * k; k = (k + 1) % 10; if (k == 0) { j++; } } num->len = (len + 9) / 10; } // 输出大数 void print(BigNum *num) { for (int i = num->len - 1; i >= 0; i--) { printf("%d", num->digits[i]); } printf("\n"); } // 比较两个大数的大小,如果 num1 > num2,返回 1,num1 < num2,返回 -1,num1 = num2,返回 0 int compare(BigNum *num1, BigNum *num2) { if (num1->len > num2->len) { return 1; } else if (num1->len < num2->len) { return -1; } else { for (int i = num1->len - 1; i >= 0; i--) { if (num1->digits[i] > num2->digits[i]) { return 1; } else if (num1->digits[i] < num2->digits[i]) { return -1; } } return 0; } } // 大数加法 void add(BigNum *num1, BigNum *num2, BigNum *sum) { init(sum); int carry = 0; for (int i = 0; i < num1->len || i < num2->len || carry > 0; i++) { int s = num1->digits[i] + num2->digits[i] + carry; sum->digits[i] = s % 10; carry = s / 10; sum->len++; } } // 大数减法 void subtract(BigNum *num1, BigNum *num2, BigNum *diff) { init(diff); int borrow = 0; for (int i = 0; i < num1->len || i < num2->len || borrow < 0; i++) { int d = num1->digits[i] - num2->digits[i] - borrow; if (d < 0) { d += 10; borrow = 1; } else { borrow = 0; } diff->digits[i] = d; if (diff->digits[i] > 0) { diff->len = i + 1; } } } // 大数乘法 void multiply(BigNum *num1, BigNum *num2, BigNum *product) { init(product); for (int i = 0; i < num1->len; i++) { int carry = 0; for (int j = 0; j < num2->len || carry > 0; j++) { int p = num1->digits[i] * num2->digits[j] + product->digits[i+j] + carry; product->digits[i+j] = p % 10; carry = p / 10; if (product->digits[i+j] > 0 && i+j+1 > product->len) { product->len = i+j+1; } } } } // 大数除法 void divide(BigNum *num1, BigNum *num2, BigNum *quotient, BigNum *remainder) { init(quotient); init(remainder); for (int i = num1->len - 1; i >= 0; i--) { multiply(remainder, &num2[0], &num2[1]); remainder->digits[0] = num1->digits[i]; remainder->len = 1; int q = 0, left = 0, right = 9; while (left <= right) { int mid = (left + right) / 2; num2->digits[0] = mid; multiply(num2, &num2[1], &num2[2]); if (compare(remainder, &num2[2]) >= 0) { q = mid; left = mid + 1; } else { right = mid - 1; } } quotient->digits[i] = q; if (quotient->digits[i] > 0 && i+1 > quotient->len) { quotient->len = i+1; } subtract(remainder, &num2[2], remainder); } } int main() { BigNum a, b, c, d, e, ab, abc, abcd, abcd_e, result; char buf[MAX_DIGITS+1]; while (scanf("%s", buf) != EOF) { read(&a, buf); scanf("%s", buf); read(&b, buf); scanf("%s", buf); read(&c, buf); scanf("%s", buf); read(&d, buf); scanf("%s", buf); read(&e, buf); add(&a, &b, &ab); multiply(&ab, &c, &abc); subtract(&abc, &d, &abcd); divide(&abcd, &e, &abcd_e, &d); print(&abcd_e); } return 0; } ``` 代码中使用了大数结构体来存储高精度数,并实现了加法、减法、乘法、除法等基本运算。在计算 ((a+b)*c-d)/e 时,按题目要求依次进行加法、乘法、减法、除法运算即可。

相关推荐

优化这段代码 import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; import java.util.TreeSet; /** * @Author 陈平安 * @Date 2022/8/29 9:25 * @PackageName:PACKAGE_NAME * @ClassName: Main * @Description: TODO * @Version 1.0 */ public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int[] arr = new int[n]; // int m = scanner.nextInt(); //获取数据 // int sum = 0;///每组的和 // TreeSet map = new TreeSet();//利用其具有自动排序的功能 // ArrayList<Integer> list = new ArrayList<>();//储存待测数据 for (int j = 0; j < arr.length; j++) { // list.add(scanner.nextInt()); arr[j] = scanner.nextInt(); }//for循环获取数据 // scanner.close(); // System.out.println(Arrays.toString(arr)); int count = 0; for (int i = 0; i < arr.length - 1; i++) { for (int j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { count++; int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } System.out.print(count); //System.out.println(list.toString()); // for (int j = 0; j < list.size() - m+1; j++) {//遍历数据元素,记得要加一,因为临界条件的值也有用处 // //******************************+1************************ // //System.out.println(j+" j"); // for (int k = j; k < j + m; k++) { // // sum += list.get(k); // } // map.add(sum); // // sum = 0; // sum = 0;//每m组循环以后记得置为空 // } // System.out.println(map.first());//第一个元素就是最小值 } }

任意输入两个整数,编写三个函数分别实现:(1)计算两个数的加法和;(2)计算两个整数的减法差;(3)交换这两个整数的数值。要求用“函数指针”调用这三个函数,结果在主函数中输出。目前已编写完成main函数,请编程实现sum函数、minus函数和swap函数,函数功能和要求如下所示。 /* @Filename: ex601.c @Author: Ju Chengdong @Version: 1.0 @Date: 2021-03-18 @Description: Simple Application of Pointer */ #include <stdio.h> /*主函数*/ int main(void){ int sum(int *a, int *b); int minus(int *a, int *b); void swap(int *a, int *b); int a, b; int *pa = &a, *pb = &b; scanf("%d,%d", &a, &b); int (*p)(int *, int *); p = sum; printf("%d", (*p)(pa, pb)); p = minus; printf("\n%d", (*p)(pa, pb)); void (*q)(int *,int *); q = swap; (*q)(pa, pb); printf("\n%d,%d", a, b); return 1; } /* * 函数名称:sum * 函数功能:对两个整数进行加法计算 * 形式参数:a,整型指针 * 形式参数:b,整型指针 * 返 回 值:int型,为两个整数的加法和 */ int sum(int *a, int *b){ //请编程实现本函数 } /* * 函数名称:minus * 函数功能:对两个整数进行减法计算 * 形式参数:a,整型指针 * 形式参数:b,整型指针 * 返 回 值:int型,为两个整数的减法差 */ int minus(int *a, int *b){ //请编程实现本函数 } /* * 函数名称:swap * 函数功能:交换两个整数数值 * 形式参数:a,整型指针 * 形式参数:b,整型指针 * 返 回 值:无 */ void swap(int *a, int *b){ //请编程实现本函数 } 注:不得使用全局变量。

最新推荐

recommend-type

CJC5340/4344ADC、DAC,替换CS5340数模转换器,100dB192KHz多位音频A/D转换器,音频Codec

CJC5340,ADC、DAC,替换CS5340,数模转换器,100dB192KHz多位音频A/D转换器,音频Codec 100dB192KHz多位音频A/D转换器 1.先进多位架构 2. 24位转换¨ 3.支持所有音频样本率包括192KHz¨ 4. 88分贝THD+N¨ 5.77mW...
recommend-type

pre_o_1csdn63m9a1bs0e1rr51niuu33e.a

pre_o_1csdn63m9a1bs0e1rr51niuu33e.a
recommend-type

matlab建立计算力学课程的笔记和文件.zip

matlab建立计算力学课程的笔记和文件.zip
recommend-type

FT-Prog-v3.12.38.643-FTD USB 工作模式设定及eprom读写

FT_Prog_v3.12.38.643--FTD USB 工作模式设定及eprom读写
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

2. 通过python绘制y=e-xsin(2πx)图像

可以使用matplotlib库来绘制这个函数的图像。以下是一段示例代码: ```python import numpy as np import matplotlib.pyplot as plt def func(x): return np.exp(-x) * np.sin(2 * np.pi * x) x = np.linspace(0, 5, 500) y = func(x) plt.plot(x, y) plt.xlabel('x') plt.ylabel('y') plt.title('y = e^{-x} sin(2πx)') plt.show() ``` 运行这段
recommend-type

JSBSim Reference Manual

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

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依