c语言大作业大数计算,大整数运算c语言实现--c语言大作业报告+源码.doc

大整数运算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_Mi

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值