大整数的四则运算高质量C语言程序

合集下载

c实现任意长整数的四则运算

c实现任意长整数的四则运算

实验题目:设计一数据结构可处理任意长度的整数概要设计1.数据结构的定义采用双向链表存储任意长整数。

双向链表的定义如下:class DblList {private:DblNode *head, *tail;DblNode *current;int sign;public:DblList(); //构造函数~DblList(); //析构函数bool CreatList(string); //生成一个双向链表,存储整数int GetCount(); //获取整数的长度void Insert(DblNode *); //从表尾插入一个结点void InsertFront(DblNode *); //从表头插入void Clear(); //清除该链表void operator+(DblList &); //实现两个任意整数的加法void operator*(DblList &); //实现两个任意整数的乘法DblList & operator=(DblList &); //重载赋值运算符int Compare(DblList &); //两个整数的绝对值比较void Display(); //任意长度整数的标准化输出};说明:数据的存储,无外乎顺序或者链表。

顺序存储时,定义数组无法实现任意长度,而且需要预设一个maxsize,不是特别的方便。

所以采用链式存储方式。

而且任意长数据通过字符串输入。

在链表的每一个结点中,数据域是在该数位上的数字大小。

2.主要功能模块的功能◆任意长整数的输入◆任意长整数的标准化输出◆两个整数的加法◆两个整数的乘法三.详细设计(主模块流程图)五、使用说明及测试结果1.使用说明:点击打开应用程序pro1.exe。

依次输入任意两个整数(例如123456,+1234567),按回车,会出现菜单,如下图:按‘1’则实现两整数的加法按‘2’则实现两整数的乘法按‘#’结束注:菜单可重复出现直至‘#’退出。

四则运算c语言编程

四则运算c语言编程

四则运算c语言编程四则运算是数学中常见的基本运算,也是编程语言中必须掌握的基本知识。

在C语言中,四则运算包括加、减、乘、除四个基本运算。

本文将介绍C语言中四则运算的使用方法和注意事项。

加法运算加法运算是最基本的运算之一,C语言中使用“+”符号进行加法运算。

例如,计算两个整数a和b的和,可以使用以下代码:int a = 5;int b = 3;int sum = a + b;printf("sum = %d\n", sum);在这个例子中,首先定义了两个整数a和b,并将它们相加得到sum变量的值。

最后使用printf函数将sum的值输出到屏幕上。

减法运算减法运算也是常见的运算之一,C语言中使用“-”符号进行减法运算。

例如,计算两个整数a和b的差,可以使用以下代码:int a = 5;int b = 3;int diff = a - b;printf("diff = %d\n", diff);在这个例子中,首先定义了两个整数a和b,并将它们相减得到diff变量的值。

最后使用printf函数将diff的值输出到屏幕上。

乘法运算乘法运算也是常见的运算之一,C语言中使用“*”符号进行乘法运算。

例如,计算两个整数a和b的积,可以使用以下代码:int a = 5;int b = 3;int product = a * b;printf("product = %d\n", product);在这个例子中,首先定义了两个整数a和b,并将它们相乘得到product变量的值。

最后使用printf函数将product的值输出到屏幕上。

除法运算除法运算也是常见的运算之一,C语言中使用“/”符号进行除法运算。

例如,计算两个整数a和b的商,可以使用以下代码:int a = 5;int b = 3;int quotient = a / b;printf("quotient = %d\n", quotient);在这个例子中,首先定义了两个整数a和b,并将它们相除得到quotient变量的值。

大整数的四则运算课程设计说明书

大整数的四则运算课程设计说明书

中北大学课程设计阐明书学院、系:软件学院专业:软件工程学号:学生姓名:宋雨琪设计题目:大整数旳四则运算起迄日期: 10月11日~11月16日****:***日期: 11月16日1 设计目旳本课程设计是采用C语言, 在VC平台下实现大整数旳四则运算, 该系统运行在MS-DOS 命令行模式下。

本课程设计为学生提供了一种既动手又动脑, 独立实践旳机会, 将书本上旳理论知识和实际有机旳结合起来, 锻炼学生旳分析处理实际问题旳能力。

提高学生适应实际, 实践编程旳能力。

1)深入巩固和复习C程序设计旳基础知识;2)培养学生构造化程序、模块化程序设计旳措施和能力;3)理解软件旳编制过程及各环节旳详细内容;4)提高学生程序调试技巧、软件设计能力和代码规范化等素质;提高学生分析问题、处理问题以及实际运用能力。

2 任务概述完毕大整数旳四则运算任务, 假定整数不超过五十位规定:1) 在屏幕上可以手动输入待求旳两个大整数;2) 输入完毕后通过选择可以完毕大整数旳加、减、乘、除运算;3)将成果分别显示在屏幕上。

4) 验收时程序可以演示, 自己单独做。

3 模块划分1) 定义c_to_d(char str[N], char d[N])函数, 实现把str旳各位转变成对应整数, 右对齐存入d, start为最高位下标2)定义d_to_c(char d[N], char str[N], int start)函数, 实现把d中数字d[start...N-1]转变为字符左对齐存入str3)定义加法函数4)定义减法函数5)定义乘法函数6)定义除法函数7)定义输出格式函数8)运用主函数计算4 重要函数阐明及其N-S图1)主函数阐明①定义变量②输入要进行运算代码数字③输入数字④调用函数进行运算2)其他函数阐明①min函数, 比较两数大小②c_to_d(char str[N], char d[N])函数, 实现把str旳各位转变成对应整数, 右对齐存入d, start为最高位下标③d_to_c(char d[N], char str[N], int start)函数, 实现把d中数字d[start...N-1]转变为字符左对齐存入str④add(char str_a[N], char str_b[N], char str_c[N]), 加法函数⑤sub(char str_a[N], char str_b[N], char str_c[N]), 减法函数⑥compare(char str1[N], char str2[N]) , 实现str1,str2内存旳是要进行比较旳大整数⑦mul(char str_a[N], char str_b[N], char str_c[N]), 乘法函数⑧divd(char str_a[N], char str_b[N], char str_c[N]), 除法函数重要函数旳N-S图:图1: 函数c_to_d(char str[N],char d[N]) N-S图图2: 函数d_to_c(char d[N],char str[N],int start) N-S图图3: 加法运算函数add()旳N-S图图4: 减法运算函数sub()旳N-S图图5: 比较函数compare()旳N-S图图6: 乘法运算函数旳N-S图图7: 除法运算函数旳N-S图图8: 运行四则运算旳主函数旳N-S 图5 程序运行数据及其成果1) 测试加法输入1再输入和7for(i=1; ;i++)调用输出格式函数welcome()输入一种数x判断x 与否等于0T F 定义变量x,i, str_a[N],str_b[N],str_c[N];输出(“程序结束,欢迎 您旳使用!”)并结束程序while(x>4||x<0) 输出("输入错误,请重新输入) 再次输入一种数字 输出(”请输入需要旳两个数”) 输入一种数再输入一种数switch()case 1:运行加case 2:运行case 3:运行case 4:运行输出成果图一加法运算成果2)测试减法输入2再输入和图二减法运算成果3)测试乘法输入3再输入和23452435图三乘法运算成果4)测试除法输入4再输入和图四除法运算成果5)退出输入0图五退出程序6 课程设计心得这次我旳课程设计是大整数旳四则运算, 由于平常使用旳32位操作系统上, 整形数旳长度是32位, 即四个字节, 对于一般旳应用, 这个长度旳整数已经足够。

c语言实现大整数运算 -回复

c语言实现大整数运算 -回复

c语言实现大整数运算-回复【C语言实现大整数运算】在计算机科学中,整数是一种基本的数据类型,它用来表示没有小数部分的数值。

然而,在一些特定的场景中,我们可能需要处理超出常规整数范围的大整数。

C语言作为一种高效且广泛应用的编程语言,也可以实现大整数运算。

本文将以C语言实现大整数运算为主题,一步一步介绍如何处理大整数运算。

首先,我们需要明确大整数的定义。

一般情况下,我们将大整数定义为超过常规整数范围的数值。

在C语言中,常规整数的范围通常为-2^31到2^31-1(32位操作系统)或者-2^63到2^63-1(64位操作系统)。

如果我们需要处理更大范围的整数,就需要自定义大整数数据类型。

接下来,我们需要定义大整数数据类型。

由于C语言中没有内置的大整数数据类型,我们可以使用数组来实现大整数。

具体来说,可以使用一个数组来存储大整数的每一位数字,并且使用一个整数来记录大整数的位数。

这样,我们就可以通过访问数组的不同元素来实现大整数的各种运算。

以下是一个示例的大整数数据结构:c#define MAX_SIZE 100 定义最大位数typedef struct {int digits[MAX_SIZE]; 数组用于存储每一位数字int length; 记录大整数的位数} BigInt;接下来,我们需要实现大整数的输入和输出功能。

由于大整数的位数可能非常大,因此我们需要使用字符串来表示大整数。

需要注意的是,我们需要按照从高位到低位的顺序存储大整数的每一位数字。

以下是一个示例的大整数输入和输出函数:cvoid inputBigInt(BigInt* num) {char input[MAX_SIZE];scanf("s", input);int len = strlen(input);num->length = len;for (int i = 0; i < len; i++) {num->digits[i] = input[len - 1 - i] - '0';}}void outputBigInt(BigInt num) {for (int i = num.length - 1; i >= 0; i) {printf("d", num.digits[i]);}printf("\n");}接下来,我们可以实现大整数的加法运算。

计算机C++实现任意长整数的四则运算

计算机C++实现任意长整数的四则运算

计算机C++实现任意长整数的四则运算一、什么是任意长整数任意长整数,也称作大整数或无限长整数,可以表示出任意长度的整数,是由多个整数构成的有限序列。

它的最大特征是其位数不受限制,可以用来表示任意大小的整数。

二、任意长整数四则运算1、四则运算任意长整数四则运算是指对任意长整数进行加、减、乘、除四种基本运算的操作。

2、C++实现任意长整数的四则运算(1)首先要明确,任意长整数是由多个整数构成的有限序列,所以要想实现四则运算,必须将单个整数进行相应的计算。

(2)因此,可以采用逐位计算的方法来实现任意长整数的四则运算。

具体的步骤如下:(a)以字符串的形式表示任意长整数,并转换成整型数组,每个元素代表任意长整数中的一位数字;(b)从数组的末尾开始,依次取出每一位数字,根据相应的运算符进行计算;(c)将计算结果存入到一个新的数组中;(d)最后,把新数组中的元素按照从小到大的顺序组合成一个新的字符串,这就是任意长整数的四则运算的结果。

三、C++实现任意长整数的四则运算的算法(1)定义函数原型:string Cal(stringstr1,string str2,char op);(2)申请内存空间:int *arr1 = newint[str1.length()]; int *arr2 = newint[str2.length()]; int *res = newint[max(str1.length(),str2.length())];(3)将字符串转化为整型数组:for(int i=0;i <str1.length();i++) arr1[i] = str1[i] - '0'; for(int j=0;j < str2.length();j++) arr2[j] = str2[j] - '0';(4)根据所传入的运算符,进行相应的运算:switch (op) {case '+': //加法运算break; case '-': //减法运算break; case '*': //乘法运算break; case '/': //除法运算break;}(5)将计算结果存入到新的数组中:for(intk=0;k<max(str1.length(),str2.length());k++) res[k] = add[k];(6)将计算结果的数组转换成字符串:string result=""; for(intl=0;l<max(str1.length(),str2.length());l++) result += to_string(res[l]);(7)返回计算结果return result;(8)释放内存空间delete[] arr1; delete[] arr2; delete[] res;四、总结任意长整数四则运算是指对任意长整数进行加、减、乘、除四种基本运算的操作。

c语言四则运算程序

c语言四则运算程序

c语言四则运算程序C语言是一种通用的计算机程序设计语言,用于开发软件和操作系统等工程项目。

C语言的语法简洁,可以编写出高效的代码,因此在编写四则运算程序中被广泛应用。

四则运算指的是加减乘除四种基本运算。

在C语言中,可以使用基本的算术运算符来进行四则运算,例如“+”表示加法,“-”表示减法,“*”表示乘法,“/”表示除法。

在程序中使用scanf函数获取用户输入的数字,然后通过计算输出运算结果。

下面展示一个简单的加法程序,用户输入两个数字,程序通过相加运算输出结果:#include<stdio.h>int main(){int a,b,c;printf("Please enter two numbers:");scanf("%d %d",&a,&b);c=a+b;printf("%d + %d = %d\n",a,b,c);return 0;}以上程序展示了如何使用scanf函数获取用户的输入。

scanf函数的第一个参数是格式化字符串,指定要读取的类型及其数量,例如“%d”表示整数,“%f”表示浮点数。

第二个参数是存储输入值的变量名或指针,它们必须与格式化字符串中要读取的类型相匹配。

当用户输入两个整数后,程序将它们相加并输出结果。

输出语句中使用了占位符“%d”,它们对应的是printf函数中的后三个参数,分别是a,b,c的值。

除了加法,减法、乘法、除法的处理也很相似。

下面展示一个利用switch语句实现四则运算的程序:#include<stdio.h>int main(){int a,b,c;char op;printf("Please enter two numbers:");scanf("%d %d",&a,&b);printf("Please enter the operator:");scanf(" %c",&op);switch(op){case '+': c=a+b;break;case '-': c=a-b;break;case '*': c=a*b;break;case '/': c=a/b;break;default: printf("Invalid operator!");return1;break;}printf("%d %c %d = %d\n",a,op,b,c);return 0;}这个程序通过switch语句根据输入的运算符选择相应的操作。

c语言四则运算要求,输入两个数每行加减乘除

c语言四则运算要求,输入两个数每行加减乘除

c语言四则运算要求,输入两个数每行加减乘除C语言是一种强大的编程语言,可以用于实现各种各样的功能。

其中,四则运算是基本的数学运算,包括加法、减法、乘法和除法。

在这篇文章中,我将详细介绍C语言中实现四则运算的要求。

首先,我们需要了解C语言的基本语法,包括变量的声明和赋值、输入输出语句以及运算符的使用。

在C语言中,我们可以使用int类型的变量来存储整数,使用float或double类型的变量来存储浮点数。

对于加法运算,我们可以使用加号“+”来实现。

例如,如果我们想计算两个整数a和b的和,可以使用下面的语句:```cint a, b, sum;a = 10;b = 20;sum = a + b;printf("两数之和为:%d\n", sum);```在上面的代码中,我们首先声明了三个变量a、b和sum,其中sum用来存储a和b的和。

然后,我们分别给a和b赋值,并使用加号运算符将它们相加。

最后,我们使用printf函数将结果输出到屏幕上。

类似地,减法运算可以使用减号“-”来实现。

例如,我们想计算两个整数a和b的差,可以使用下面的代码:```cint a, b, difference;a = 10;b = 20;difference = a - b;printf("两数之差为:%d\n", difference);```上面的代码中,我们将a和b相减,并将结果存储在difference 变量中,然后输出结果到屏幕上。

乘法运算可以使用星号“*”来实现。

例如,我们想计算两个整数a和b的积,可以使用下面的代码:```cint a, b, product;a = 10;b = 20;product = a * b;printf("两数之积为:%d\n", product);```在上面的代码中,我们将a和b相乘,然后将结果存储在product 变量中,并将结果输出到屏幕上。

大一c语言编程四则运算

大一c语言编程四则运算

大一c语言编程四则运算在学习C语言过程中,四则运算是我们最常接触的基础知识之一。

四则运算包括加、减、乘、除四种基本运算,本文将以大一C语言编程四则运算为主题,详细介绍四则运算的实现方法和注意点。

一、加法运算加法运算是最简单的运算之一,只需要使用“+”符号即可实现。

例如,将两个整数a和b相加,可以使用以下代码实现:int a = 10;int b = 20;int c = a + b;其中,a和b为要相加的两个整数,c为保存结果的变量。

二、减法运算减法运算与加法运算类似,只需要使用“-”符号即可实现。

例如,将两个整数a和b相减,可以使用以下代码实现:int a = 20;int b = 10;int c = a - b;其中,a和b为要相减的两个整数,c为保存结果的变量。

三、乘法运算乘法运算需要使用“*”符号。

例如,将两个整数a和b相乘,可以使用以下代码实现:int a = 10;int b = 20;int c = a * b;其中,a和b为要相乘的两个整数,c为保存结果的变量。

需要注意的是,如果a和b中有一个是浮点数,那么结果也会是浮点数。

四、除法运算除法运算需要使用“/”符号。

例如,将两个整数a和b相除,可以使用以下代码实现:int a = 20;int b = 10;int c = a / b;其中,a和b为要相除的两个整数,c为保存结果的变量。

需要注意的是,如果a和b中有一个是浮点数,那么结果也会是浮点数。

此外,如果b为0,程序将会出现除0错误。

五、复合运算除了基本的四则运算外,还有一些复合运算,例如加等于和减等于运算。

例如,将变量a加上10,可以使用以下代码实现:int a = 10;a += 10;其中,a += 10等价于a = a + 10。

减等于运算同理。

六、小数运算除了整数运算外,C语言还支持小数运算。

小数运算需要使用浮点型变量,例如:float a = 1.23;float b = 4.56;float c = a + b;其中,a和b为要相加的两个浮点数,c为保存结果的变量。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

设计题目: 大整数的四则运算1. 功能简介:编写出实现大整数之间相加,相减,相乘,相除的程序,并输出计算结构。

课程设计要求:采用模块化程序设计源程序中应有足够的注释必须上机调试通过注重算法运用,优化存储效率与运算效率需提交源程序(含有注释)及相关文件(数据或数据库文件);提交设计报告书。

2. 总体结构:加法数据初判断运算符减法乘法除法退出正整数非正整转变为转变为转变为流程图:3 •概要设计:1) 加法运算利用两个整形数组分别存放两个数a 和b 的每一位的数值,最低位存放符号。

如果a 和b 同号,从最低为开始计算,如果有进位则保存在高一位,本为则减10 ,然后反序将计算后的各个位的数值保存在一个数组C并输出,如果a和b都是负数则在前面要输出负号,函数的返回值为C的位数。

如果a和b异号,也即两个正整数相减,从最低位开始相减,如果要借位则本位加10 再相减,高一位要减1,然后反序将计算后的各个位的数值保存在一个数组C 并输出,在前面要输出相应的符号位。

2) 减法运算可将减法运算转化为加法运算,只要将被减数的符号改变即可。

3) 乘法运算符号存放在最低位,将其中一个数a 的每一位分别乘以另一个数b 的每一位,并将结果保存在数组C 中,然后重复计算a的下一位跟b的每一位的乘积,把上一次计算保存在C 的值加上本次计算后的值,并保存在C自身中,直到a的最高位,最后输出符号和相应的计算结果。

4) 除法运算利用乘法和减法,将除数分别乘以1到9,直到其值大于等于被除数的对应的数,然后被除数对应的数减去其乘积,保存在一个数组中,下一次循环把它归到被除数中继续做除法运算,最后得到余数并输出。

4. 函数功能:1. void init(int a[],int b[],int *p1,int *p2)2. 功能说明:读入所要计算的数值,数据初始化3. int plus(int a[],int b[],int C[],int m,int n)4. 功能说明:两个正整数相加3. void Change(int a[],int b[],int m,int n) 功能说明:当两异号数相加时,改变其符号以符合加法运算5. int minus(int a[],int b[],int d[],int m,int n)6. 功能说明:两个正整数相减5. void minusfun(int a[],int b[],int d[],int m,int n) 功能说明:判断两个异号数的相加方式7. int multi(int a[],int b[],int C[],int m,int n)8. 功能说明:两个正整数相乘7. void print(long C[],int flag)功能说明:打印带符号flag ( 1为负)的Iong c[]数组8. int write(long a[],int flag)功能说明:将键盘敲入的数字按4位一组放入Iong a[],且将符号放入flag9. void mul(long a[],int first,int last,long b[],long C[])功能说明:乘法,a的第last到first位乘以b,答案放到C10. int compara(long a[],int first,int last,long b[])功能说明:比较数组a,b大小,first last分别为a的最高最低位11. int minusd(long a[],int first,int last,long b[],long c[],int flag)功能说明:a为被减数,first IaSt为a最咼最低位,b为减数,c为差,flag为符号12. void div(long a[],long b[],long c[],int fa)功能说明:除法,a除以b的值放入c,fa为a符号13. void menu()功能说明:打印菜单函数14. void main()功能说明:主函数,调用其余函数,计算相应功能的值并输出。

5. 源程序:#include<iostream.h> #include<math.h> #include<stdio.h>#define MAX 40 //可以修改,此时最大运算位数为四十位#define N 10 //此处应为最大位数除以 4void init(int a[],int b[],int *p1,int *p2) //输入{int i,j;char r,s; for(i=0;i<MAX;i++){a[i]=0;b[i]=0;}printf(" 请输入处理的第一个数的值:"); r=getchar();if(r==45){a[0]=r;for(i=1;(r=getchar())!='\n';i++) a[i]=r-48;}else{a[1]=r-48;for(i=2;(r=getchar())!='\n';i++) a[i]=r-48;*p1=i;}printf(" 请输入处理的第二个数的值:s=getchar();if(s==45){b[0]=s;for(j=1;(s=getchar())!='\n';j++)b[j]=s-48;}else{b[1]=s-48;for(j=2;(s=getchar())!='\n';j++)b[j]=s-48;}*p2=j;}int plus(int a[],int b[],int c[],int m,int n){int d[MAX]={0},i,j,k;for(i=0;i<MAX;i++) c[i]=0;if(a[1]==0){for(i=0;i<n;i++) c[i]=b[i];return(i);}if(b[1]==0){for(i=0;i<m;i++) c[i]=a[i]; return(i);}for(i=m-1,j=n-1,k=1;i>0&&j>0;i--,j--,k++){d[k]=a[i]+b[j]+d[k];if(d[k]>9){ d[k+1]++;d[k]=d[k]-10;}}while(i>0){d[k]=d[k]+a[i];if(d[k]>9){ d[k+1]++;d[k]=d[k]-10;}k++;");//加法运算i--;}while(j>0){ d[k]=d[k]+b[j]; if(d[k]>9) {d[k+1]++;d[k]=d[k]-10;}k++;j--;}d[0]=a[0]+b[0];c[0]=d[0];if(d[k]==0)k--;for(i=1;k>0;i++,k--)c[i]=d[k];return(i);}void change(int a[],int b[],int m,int n){int i,j;int c[MAX];if(m<=n&&b[0]==45){ for(i=1;i<m;i++) c[i]=a[i];//变号运算for(i=1,j=1;j<n;i++,j++) a[i]=b[j];for(i=1,j=1;j<n;i++,j++) b[i]=c[j];for(j=i;j<MAX;j++) b[j]=0;return;}if(m>=n&&a[0]==45){a[0]=0;b[0]=45;return;}int minus(int a[],int b[],int d[],int m,int n)}int c[MAX]={0},i,j,k;for(i=0;i<MAX;i++)d[i]=0;for(i=m-1,j=n-1,k=1;i>0&&j>0;i--,j--,k++) {if(c[k]<0||a[i]<b[j]){c[k]=c[k]+a[i]-b[j];if(c[k]<0){c[k]+=10;c[k+1]--;}}else c[k]=a[i]-b[j];}while(i>0){c[k]=c[k]+a[i];if(c[k]<0){c[k]+=10;c[k+1]--;}k++;i--;}c[k]=a[i]+c[k];while(c[k]<=0&&k>0)k--;for(i=1;k>0;i++)d[i]=c[k--];return(i);}void minusfun(int a[],int b[],int d[],int m,int n)//判断是否两异号数相加{int i,j,f=0,g=0;if(a[1]==0){if(b[0]!=0) printf("-"); for(i=1;i<n;i++) printf("%d",b[i]);printf("\n");return;if(b[1]==0){if(a[0]!=0) printf("-");for(i=1;i<m;i++) printf("%d",a[i]);printf("\n");return;}if(m==n){for(i=1;i<m;i++){ if((a[i]<b[i]&&b[0]==45)||(a[i]>b[i]&&a[0]==45)) g=1;if(a[i]!=b[i]) f=1;}if(f==0){printf("0\n");return;}if(g==1){ change(a,b,m,n); printf("-");j=minus(a,b,d,n,m);for(i=1;i<j;i++) printf("%d",d[i]); printf("\n");return;}else if(a[0]==45&&b[0]==0){j=minus(b,a,d,n,m);for(i=1;i<j;i++) printf("%d",d[i]);printf("\n");return;}else{j=minus(a,b,d,m,n);for(i=1;i<j;i++) printf("%d",d[i]);printf("\n");return;}if(m>n&&b[0]==45){j=minus(a,b,d,m,n);for(i=1;i<j;i++) printf("%d",d[i]);printf("\n");return;}if(m<n&&b[0]==45){change(a,b,m,n); printf("-"); j=minus(a,b,d,n,m); for(i=1;i<j;i++) printf("%d",d[i]);printf("\n");return;}if(m>n&&a[0]==45){change(a,b,m,n); printf("-"); j=minus(a,b,d,m,n);for(i=1;i<j;i++)printf("%d",d[i]);printf("\n");return;}if(m<n&&a[0]==45){j=minus(b,a,d,n,m);for(i=1;i<j;i++)printf("%d",d[i]);printf("\n");return;}}int multi(int a[],int b[],int c[],int m,int n)//正整数乘法运算{int d[MAX]={0},e[MAX]={0},i,j,k,r,s,x,y;for(i=0;i<MAX;i++)c[i]=0;if(m<=n)for(i=m-1,s=1;i>0;i--,s++){{for(r=0;r<MAX;r++){d[r]=0;e[r]=0;}for(j=n-1,k=1*s;j>0;j--,k++){d[k]=a[i]*b[j]+d[k];if(d[k]>9) {d[k+1]=d[k+1]+d[k]/10;d[k]=d[k]%10;} }if(d[k]==0)k--;y=k;for(r=1;k>0;r++,k--)e[r]=d[k];for(r=1;r<MAX;r++)d[r]=e[r];if(s==1)x=plus(c,d,e,0,y+1);elsex=plus(c,d,e,y,y+1);for(r=0;r<MAX;r++)c[r]=e[r];}}else if(m>n){for(j=n-1,s=1;j>0;j--,s++){for(r=0;r<MAX;r++){d[r]=0;e[r]=0;}for(i=m-1,k=1*s;i>0;i--,k++){d[k]=a[i]*b[j]+d[k];if(d[k]>9){d[k+1]=d[k+1]+d[k]/10; d[k]=d[k]%10;}}if(d[k]==0)k--;y=k;for(r=1;k>0;r++,k--)e[r]=d[k];for(r=1;r<MAX;r++)d[r]=e[r];if(s==1)x=plus(c,d,e,0,y+1);else x=plus(c,d,e,y,y+1);for(r=0;r<MAX;r++)c[r]=e[r];}}return(x);}void print(long c[],int flag) // 输出{int i;for(i=N-1;i>=0;i--)if(c[i])break;if(flag)printf("-");printf("%4d",c[i--]);for(;i>=0;i--){if(c[i]/1000)printf(" %4ld",c[i]);else if(c[i]/100)printf(" 0%3ld",c[i]);else if(c[i]/10)printf(" 00%2ld",c[i]);elseprintf(" 000%1ld",c[i]);}}int write(long a[],int flag) // 将键盘敲入的数字按4 位一组放入long a[], 且将符号放入flag {char num[N*4];char temp;int i,j,k;for(i=0;i<N*4;i++){ num[i]=getchar(); if(num[i]==10) {i--;break;} if(num[i]==45) {flag=(flag+1)%2;i--;}}k=0;for(j=0;j<=i/2;j++){ temp=num[j]; num[j]=num[i-k]; num[i-k]=temp; k++;}k=1;for(j=0;j<=i;j++) switch(k){case 1:a[j/4]+=(long)(num[j]-48);k++; break;case 2:a[j/4]+=(long)(num[j]-48)*10;k++; break;case 3:a[j/4]+=(long)(num[j]-48)*100;k++; break;case 4:a[j/4]+=(long)(num[j]-48)*1000;k=1; break;}return flag;}void mul(long a[],int first,int last,long b[],long c[]) //乘法{int i,j;int max_i;long temp; for(max_i=N-1;max_i>=0;max_i--) if(b[max_i])break; for(i=0;i<=max_i;i++) if(b[i])for(j=first;j<=last;j++){ temp=a[j]*b[i]; c[i+j-first]+=temp%10000; c[i+j-first+1]+=((temp/10000)+(c[i+j-first]/10000));c[i+j-first]=c[i+j-first]%10000;}int compara(long a[],int first,int last,long b[]) //比较数组a,b 大小{int flag=2;int i;int k=0;int len; for(len=N-1;len>=0;len--) if(b[len]) break;if((first-last)>=len){ if((first-last)>len) flag=1;else for(i=len;i>=0;i--) {if(a[first-k]>b[i]){flag=1; break;} if(a[first-k]<b[i]) {flag=0; break;}k++;}}elseflag=0; returnflag;}int minusd(long a[],int first,int last,long b[],long c[],int flag) {int notchange;int i,k=0;int max; notchange=compara(a,first,last,b); if(notchange){for(i=last;i<=first;i++){if(a[i]<b[k]){a[i]+=10000;a[i+1]--;}c[i]=a[i]-b[k];k++;}}else{flag=(flag+1)%2;for(max=N-1;max>=0;max--)if(b[max]) break;for(i=0;i<=max;i++){if(b[i]<a[last+k]){b[i]+=10000; b[i+1]--;}c[i]=b[i]-a[last+k]; k++;}}return flag;}void div(long a[],long b[],long c[],int fa) //除法{long result[N+1]={0};int len_a;int k;int i;printf("\n");print(a,fa);for(len_a=N-1;len_a>=0;len_a--)if(a[len_a])break;k=len_a;while(compara(a,len_a,0,b)){while(!compara(a,len_a,k,b)) k--;c[k]=1; mul(c,k,k,b,result);while(compara(a,len_a,k,result)){c[k]++;for(i=N-1;i>=0;i--)result[i]=0;mul(c,k,k,b,result);}c[k]--;for(i=N-1;i>=0;i--)result[i]=0;mul(c,k,k,b,result);minusd(a,len_a,k,result,a,0);for(i=N-1;i>=0;i--)result[i]=0;for(len_a=N-1;len_a>=0;len_a--)if(a[len_a])break;k=len_a;}}void menu() //菜单{printf("================================== 大整数计算器==================================");printf("1. 加法2.减法3.乘法4.除法0.退出\n");printf(" 请从1~4 中选择:");return;}void main() //主函数{int flag;int max;int fa;int fb;long ad[N],bd[N],cd[2*N];int a[MAX]={0},b[MAX]={0},c[MAX]={0},d[MAX]={0};char s;int m,n,i,j;int *p1,*p2;p1=&m;p2=&n;menu();s=getchar();getchar();while(1){switch(s){case '0':return;case '1':printf(" 格式为:a+b\n"); init(a,b,p1,p2); if(a[1]==0&&b[1]==0) {printf(" 结果是:a+b=0\n");break;}if(a[0]==b[0]){j=plus(a,b,c,m,n);printf(" 结果是:a+b="); if(c[0]!=0)printf("-");for(i=1;i<j;i++)printf("%d",c[i]);}else{printf(" 结果是:a+b="); minusfun(a,b,d,m,n);}printf("\n");break;case '2':printf(" 格式为:a-b\n");init(a,b,p1,p2); if(b[0]==0)b[0]=45;else if(b[0]==45)b[0]=0;if(a[1]==0&&b[1]==0){printf(" 结果是:a-b=0\n");break;}if(a[0]==b[0])j=plus(a,b,c,m,n); printf(" 结果是:a-b=");if(c[0]!=0) printf("-");for(i=1;i<j;i++)printf("%d",c[i]);}else{printf(" 结果是:a-b="); minusfun(a,b,d,m,n);} printf("\n"); break; case '3': init(a,b,p1,p2);if(a[1]==0||b[1]==0) {printf(" 结果是:0\n"); break;} j=multi(a,b,c,m,n); printf(" 结果是:");if((a[0]==45&&b[0]==0)||(b[0]==45&&a[0]==0)) printf("-");for(i=1;i<j;i++)printf("%d",c[i]); printf("\n"); break; case '4': flag=fa=fb=0; for(max=0;max<N;max++) ad[max]=bd[max]=cd[max]=0;printf(" 请输入被除数:"); fa=write(cd,fa);printf("\n 请输入除数:"); fb=write(bd,fb);div(cd,bd,ad,fa); flag=(fa+fb)%2; printf(" / "); print(bd,fb); printf(" = "); print(ad,flag);printf("(");Prin t(cd,O); Prin tf(")∖n"); break;}men u(); s=getchar(); getchar();}}6. 调试结果程序的调试是指对程序的差错和排错,为了便于差错、阅读,在设计该程序的过程中添加了尽可能多的注释,这就为接下来的调试过程带来了很多方便。

相关文档
最新文档