大数据结构大数相乘.doc

  1. 1、本文档共37页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实用标准文案 精彩文档 课题名称:大数相乘 问题描述 计算机的内存有限,而且各个函数类型的范围有限,如果要计算两个更大的乘数,就会超出范围,得到不精确的数,如何得到更精确的数,而又不受计算机内存空间的限制,本程序就可以解决大数相乘的问题。 设计思路 这个程序的关键是如何保存大数的各个数字,以及如何处理大数乘法的进位问题。本人是运用栈的思想做的,先定义一个整型的栈,大数传入栈的整型数组中,在乘法运算函数中,先从一个栈中取出一个大数S1的个位上的数字a,再从另一个大数S2取出一个个位数字b,再将a*b+d(d为进位数)的个位数字压到栈S中,十位上进位的数字先保存到d中,再从S2中取出一个十位数,与a相乘,得到的个位数字再压到栈S中,再从S2中取出一个数字,以此类推,直到S2中的数字被a乘完,得到一个新的大数S,将该栈保存到A栈中,将S销毁,再从S1中取出大数的十位数字,与S2的各个数字相乘,得到一个新的大数压到S中,将S保存到B中,将B移位处理后,然后与A相加得到另一个大数,以此类推,最终可相加得到想要的结果。这其中还用到了大数相加的原理。 数据结构设计 前面提到,要用到栈的操作,这里,由于一个大数的最大长度是一定的,且大数最多执行的操作是插入和删除操作,所以顺序存储结构可以带来更大益处。为了便于大数相加,将大数的各个数字存入到整型数组中。 #define MAXSIZE 100 typedef struct node { int data[MAXSIZE]; int top; }SeqStack,*PSeqStack; 功能函数设计 (1)栈初始化函数Init_SeqStack(char *ch) 此函数是将传入的字符处理成0~9的整数存入整型数组中。将*ch-’0’转化为整数存入S-data[i]中,结束标志是*ch不等于’\0’ 首尾倒置函数Convert_SeqStack(PSeqStack A) 此函数是将栈中的数值首尾颠倒,比如以前是1234,现在变成4321。只要将传入的A的栈中的元素依次取出压到C中,再返回C栈即可 大数相加函数Add(PSeqStack S1,PSeqStack S2) 此函数是处理两个大数相加的功能。将传入的两个大数压到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;如果运算后其中的一个栈空了,另一个不空的栈的数值加上进位数d再直接压到S中,这样可以得到一个大数。 移位函数Crol(PSeqStack S,int n) 将其中一位大数取出一位数字与另一位大数相乘的结果移位,然后相加,从各位开始,每乘一个数,都要移位一个0 复制函数Copy_SeqStack(PSeqStack A,PSeqStack B) 将一个A栈中的元素拷贝到B栈中,先将A中的元素压到C栈中,再将C栈中的元素压到B栈中,即可实现复制功能 大数相乘函数Multiply(PSeqStack S1,PSeqStack S2) 此函数是实现大数相乘的核心算法。主要思想就是将S1中取出个位数a,分别与S2中的各个数相乘得到新的大数,再取S1中的十位数,与S1大数相乘,以此类推,然后将各个大数进行移位处理再相加 编码实现 #include stdafx.h #include stdlib.h #include stdio.h #include string.h #define MAXSIZE 100 typedef struct node { int data[MAXSIZE]; int top; }SeqStack,*PSeqStack; void Destroy_SeqStack(PSeqStack *S) { if(*S) free(*S); *S=NULL; return; } int Push_SeqStack(PSeqStack S,int x) { if(S-top==MAXSIZE-1) return 0; else { S-top++; S-data[S-top]=x; return 1; } } PSeqStack Init_SeqStack(char *ch) { PSeqStack S; int i=0; char *head; S=(PSeqStack)malloc(sizeof(SeqStack)); if(S) S-top=-1; head=ch; while(*ch!=\0) { if(*head==-) S-d

文档评论(0)

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

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

1亿VIP精品文档

相关文档