大整数运算C语言实现C语言大作业报告源码

上传人:ni****g 文档编号:459545916 上传时间:2023-01-31 格式:DOC 页数:33 大小:504.50KB
返回 下载 相关 举报
大整数运算C语言实现C语言大作业报告源码_第1页
第1页 / 共33页
大整数运算C语言实现C语言大作业报告源码_第2页
第2页 / 共33页
大整数运算C语言实现C语言大作业报告源码_第3页
第3页 / 共33页
大整数运算C语言实现C语言大作业报告源码_第4页
第4页 / 共33页
大整数运算C语言实现C语言大作业报告源码_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《大整数运算C语言实现C语言大作业报告源码》由会员分享,可在线阅读,更多相关《大整数运算C语言实现C语言大作业报告源码(33页珍藏版)》请在金锄头文库上搜索。

1、一、设计高精度无符号大整数计算(以1为存储单位)1.1需求陈述对数值很大、精度很高的数进行高精度大整数计算是一类十分常见的问题。但由于C语言中数据类型受数据长度和范围限制,普通数学计算很难实现此类问题,为尝试解决这个问题,专门设计一个C语言程序用于无符号大整数的计算,实现无符号大整数的一般计算和比较功能。1.2需求分析1.2.1功能分析表1 程序功能分析项目功能 分析BigN数据接收以字符串形式接受反转字符串函数Invert()用Translate()将字符串翻译为整形数组数据运算分别用BigN_cmp_low()和BigN_cmp_High()对数据进行比较/从a1对数组进行比较,传入两个数

2、组及其大小以及需要从第几位开始比较int BigN_cmp_High(int *, int *, int , int );/从an对数组进行比较,传入两个数组及其大小加法BigN_Add()减法BigN_Min()低位减法BigN_Min_low(),在未反转的情况下计算乘法BigN_Mul()除法BigN_Div()运算辅助函数反转整形数组InvertInt()从前面删减多余的零Del_zero_low()从末尾删减多余的零Del_zero_High()获取两个数的最大值Get_MAX()1.2.2数据分析该程序可用于计算无符号大整形数据计算,最多可计算长度为200位(即10的200次方大小

3、)的数据,但在原代码中可以随数据需求改变最大长度。该程序中所有运算和比较均考虑到了输入前导0(例0001)的情况。由于数据类型限制,该程序未加入小数计算和负数计算,除法结果中只分别计算商和余数。1.2.3技术约束本程序已在code blocks下编译通过。1.3总体设计1.3.1全局数据结构 本程序中数据采取以个位数字为单位存入整形数组,在数据计算和比较中对单个数组单元进行操作。采用整形数组存储,主要优点为可以在该程序的基础上进行改进,使字符串中每四个数字或更多存入一个数组单元中(如程序二)。1.3.2函数设计A数据的接收1反转字符串函数 Invert()函数原型:void Invert (c

4、har * , int );功能: 反转字符串,传入字符串首地址和长度 在加法、减法、乘法计算中必须先对字符串进行反转,是字符串整体逆转,但不改变字符串长度。 2. 翻译字符串函数 Translate()函数原型:void Translate (char *, int *, int *);功能:将字符串翻译为数组,传入字符串和数组及数组大小的地址B. 数据运算 1. 比较函数 BigN_cmp_low()和BigN_cmp_High()函数原型:int BigN_cmp_low (int *, int *, int , int , int ); 和int BigN_cmp_High(int *

5、, int *, int , int );功能:对整形数组分别进行地位和高位比较,即从开头和结尾开始进行比较。实现步骤:先将数组中不必要的零去掉,然后记下位数,对位数进行比较,最后从原始数据最高位进行比较,逐步往下比较,若前面小于后面,则返回值为1,;若后面小于前面,则返回-1;若相等,则返回值为0.2. 加法BigN_Add()函数原型:void BigN_Add (int *, int *, int , int *);功能:高精度加法,传入反转后的数组及其大小的最大值,和结果数组的首地址。实现步骤:依次将所需计算的两个数组及其位数的最大值传入函数,对两个函数每一位进行加法存入结果中,对满十

6、的结果进行进位,然后对该位进行对十取余存入结果。实现代码:for(i = 1; i = max; i+) resi += num1i + num2i; resi+1 += resi / 10; resi %= 10; 3. 减法BigN_Min()和低位减法BigN_Min_low()函数原型:void BigN_Min (int *, int *, int , int *); void BigN_Min_low(int *, int *, int , int , int *);功能: 高精度减法,传入反转后的数组及其大小的最大值,和结果数组的首地址。 高精度低位减法,传入未反转的数组及其大小

7、的最大值,和结果数组的首地址。实现步骤:依次将所需计算的两个数组及其位数的最大值传入函数,对两个函数每一位进行减法存入结果中,对减不着的进行借位,然后对该为进行对十取余存入结果。实现代码:for(i = 1; i = num2i) resi += num1i - num2i; else resi += num1i + 10 - num2i; num1i+1 -= 1; 4. 乘法BigN_Mul()函数原型:void BigN_Mul (int *, int *, int , int , int *);功能:高精度乘法,传入反转后的数组及其大小,和结果数组的首地址。实现步骤:对两个函数的每一位

8、进行乘法,然后对于大于10的结果进行进位操作。由于该程序中所有数组均从1开始存,故运算结果从2开始存。实现代码:for(i = 1;i = bit1; i+) for(j = 1;j = bit2; j+) resi+j += num1i * num2j; resi+j+1 += resi+j / 10; resi+j %= 10; 5. 除法BigN_Div()函数原型:void BigN_Div (int *, int *, int , int , int *, int *, int *, int *);功能:高精度除法,传入未反转的数组及其大小、商的首地址、余数的首地址、商的位数、余数的

9、位数.实现步骤:将未经反转的数组传入,从0开始做个操作,循环利用比较和减法,若余数大于除数,则进行减法调用,此处用到的减法为低位减法.实现代码:*res_bit = 1; for(i = 1;i 0)/modnum2时,为真 (*bit_mod)+; mod*bit_mod = num1i;/将num1逐个复制给mod while(BigN_cmp_low(mod,num2,*bit_mod,bit2,1) num2 for(j = 1;j = (*bit_mod); j+) tempj = 0;/每次将余数的结果置为 0 BigN_Min_low(mod,num2,(*bit_mod),bit2,temp); (res*res_bit)+; for(j = 1;j = (*bit_mod);j+) modj = 0;/mod 置零 Del_zero_low(temp,bit_mod);/对 mod 低位去零,防止如“001”的结果 for(j = 1; jb?a:b;1.4设计思想说明该程序中所有大整型无符号数据的运算均采用模拟手算的方法,对单个数字进行操作,以实现大整型运算。为程序运行更加高效,调用函数过程中传输多个参数,若将该程序作为模板,则可省略其中某些参数,使调用更方便。1.5测试结果说明主界面: 测试加法: 图一 图二测试减法: 图一 图二测试乘法: 图一

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号