大数据结构大数相乘

大数据结构大数相乘

ID:31599174

大小:144.00 KB

页数:37页

时间:2019-01-15

大数据结构大数相乘_第1页
大数据结构大数相乘_第2页
大数据结构大数相乘_第3页
大数据结构大数相乘_第4页
大数据结构大数相乘_第5页
资源描述:

《大数据结构大数相乘》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、实用标准文案课题名称:大数相乘1.问题描述计算机的内存有限,而且各个函数类型的范围有限,如果要计算两个更大的乘数,就会超出范围,得到不精确的数,如何得到更精确的数,而又不受计算机内存空间的限制,本程序就可以解决大数相乘的问题。2.设计思路这个程序的关键是如何保存大数的各个数字,以及如何处理大数乘法的进位问题。本人是运用栈的思想做的,先定义一个整型的栈,大数传入栈的整型数组中,在乘法运算函数中,先从一个栈中取出一个大数S1的个位上的数字a,再从另一个大数S2取出一个个位数字b,再将a*b+d(d为进位数)的个位数字压到栈S中,十位上进位的数字先保存

2、到d中,再从S2中取出一个十位数,与a相乘,得到的个位数字再压到栈S中,再从S2中取出一个数字,以此类推,直到S2中的数字被a乘完,得到一个新的大数S,将该栈保存到A栈中,将S销毁,再从S1中取出大数的十位数字,与S2的各个数字相乘,得到一个新的大数压到S中,将S保存到B中,将B移位处理后,然后与A相加得到另一个大数,以此类推,最终可相加得到想要的结果。这其中还用到了大数相加的原理。3.数据结构设计精彩文档实用标准文案前面提到,要用到栈的操作,这里,由于一个大数的最大长度是一定的,且大数最多执行的操作是插入和删除操作,所以顺序存储结构可以带来更大

3、益处。为了便于大数相加,将大数的各个数字存入到整型数组中。#defineMAXSIZE100typedefstructnode{intdata[MAXSIZE];inttop;}SeqStack,*PSeqStack;1.功能函数设计(1)栈初始化函数Init_SeqStack(char*ch)此函数是将传入的字符处理成0~9的整数存入整型数组中。将*ch-’0’转化为整数存入S->data[i]中,结束标志是*ch不等于’’(2)首尾倒置函数Convert_SeqStack(PSeqStackA)此函数是将栈中的数值首尾颠倒,比如以前是12

4、34,现在变成4321。只要将传入的A的栈中的元素依次取出压到C中,再返回C栈即可(3)大数相加函数Add(PSeqStackS1,PSeqStackS2)精彩文档实用标准文案此函数是处理两个大数相加的功能。将传入的两个大数压到S1和S2中,当S1或S2不为空时,从S1中取出a,从S2中取出b,得到Result=(a+b)%10+d,其中初始时d=0,再判断Result是否大于10,如果小于10直接压到栈S中,如果大于10将Result%10压入栈中,令d=(a+b)/10+Result/10;如果运算后其中的一个栈空了,另一个不空的栈的数值加上

5、进位数d再直接压到S中,这样可以得到一个大数。(4)移位函数Crol(PSeqStackS,intn)将其中一位大数取出一位数字与另一位大数相乘的结果移位,然后相加,从各位开始,每乘一个数,都要移位一个0(5)复制函数Copy_SeqStack(PSeqStackA,PSeqStackB)将一个A栈中的元素拷贝到B栈中,先将A中的元素压到C栈中,再将C栈中的元素压到B栈中,即可实现复制功能(6)大数相乘函数Multiply(PSeqStackS1,PSeqStackS2)此函数是实现大数相乘的核心算法。主要思想就是将S1中取出个位数a,分别与S2

6、中的各个数相乘得到新的大数,再取S1中的十位数,与S1大数相乘,以此类推,然后将各个大数进行移位处理再相加1.编码实现#include"stdafx.h"#include"stdlib.h"#include"stdio.h"#include"string.h"#defineMAXSIZE100typedefstructnode{intdata[MAXSIZE];inttop;精彩文档实用标准文案}SeqStack,*PSeqStack;voidDestroy_SeqStack(PSeqStack*S){if(*S)free(*S);*S=NULL

7、;return;}intPush_SeqStack(PSeqStackS,intx){if(S->top==MAXSIZE-1)return0;else{S->top++;S->data[S->top]=x;return1;}}精彩文档实用标准文案PSeqStackInit_SeqStack(char*ch){PSeqStackS;inti=0;char*head;S=(PSeqStack)malloc(sizeof(SeqStack));if(S)S->top=-1;head=ch;while(*ch!=''){if(*head=='-')

8、S->data[i]=(*(++ch)-'0')*(-1);elseS->data[i]=*ch-'0';ch++;S->top++;i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。