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

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

  1. 1、本文档共33页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
大整数运算C语言实现C语言大作业报告源码

一、设计高精度无符号大整数计算 (以1为存储单位) 1.1 需求陈述 对数值很大、精度很高的数进行高精度大整数计算是一类十分常见的问题。但由于C语言中数据类型受数据长度和范围限制,普通数学计算很难实现此类问题,为尝试解决这个问题,专门设计一个C语言程序用于无符号大整数的计算,实现无符号大整数的一般计算和比较功能。 1.2 需求分析 1.2.1 功能分析 表1 程序功能分析 项目 功能 分析 BigN 数据接收 以字符串形式接受 反转字符串函数Invert() 用Translate()将字符串翻译为整形数组 数据 运算 分别用BigN_cmp_low()和BigN_cmp_High()对数据进行比较 //从a[1]对数组进行比较,传入两个数组及其大小以及需要从第几位开始比较 int BigN_cmp_High(int *, int *, int , int ); //从a[n]对数组进行比较,传入两个数组及其大小 加法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次方大小)的数据,但在原代码中可以随数据需求改变最大长度。该程序中所有运算和比较均考虑到了输入前导0(例0001)的情况。由于数据类型限制,该程序未加入小数计算和负数计算,除法结果中只分别计算商和余数。 1.2.3 技术约束 本程序已在code blocks下编译通过。 1.3 总体设计 1.3.1 全局数据结构 本程序中数据采取以个位数字为单位存入整形数组,在数据计算和比较中对单个数组单元进行操作。采用整形数组存储,主要优点为可以在该程序的基础上进行改进,使字符串中每四个数字或更多存入一个数组单元中(如程序二)。 1.3.2 函数设计 A.数据的接收 1.反转字符串函数 Invert() 函数原型:void Invert (char * , 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 *, int *, int , int ); 功能:对整形数组分别进行地位和高位比较,即从开头和结尾开始进行比较。 实现步骤:先将数组中不必要的零去掉,然后记下位数,对位数进行比较,最后从原始数据最高位进行比较,逐步往下比较,若前面小于后面,则返回值为1,;若后面小于前面,则返回-1;若相等,则返回值为0. 2. 加法BigN_Add() 函数原型:void BigN_Add (int *, int *, int , int *); 功能:高精度加法,传入反转后的数组及其大小的最大值,和结果数组的首地址。 实现步骤:依次将所需计算的两个数组及其位数的最大值传入函数,对两个函数每一位进行加法存入结果中,对满十的结果进行进位,然后对该位进行对十取余存入结果。 实现代码:for(i = 1; i = max; i++) { res[i] += num1[i] + num2[i]; res[i+1] += res[i] / 10; res[i] %= 10; } 3. 减法BigN_Min()和低位减法BigN_Min_low() 函数原型:void BigN_Min (int *, int *, int , int *); void

文档评论(0)

zhuwenmeijiale + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:7065136142000003

1亿VIP精品文档

相关文档