数据结构课程设计-大数问题

上传人:第*** 文档编号:32756743 上传时间:2018-02-12 格式:DOC 页数:11 大小:114KB
返回 下载 相关 举报
数据结构课程设计-大数问题_第1页
第1页 / 共11页
数据结构课程设计-大数问题_第2页
第2页 / 共11页
数据结构课程设计-大数问题_第3页
第3页 / 共11页
数据结构课程设计-大数问题_第4页
第4页 / 共11页
数据结构课程设计-大数问题_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《数据结构课程设计-大数问题》由会员分享,可在线阅读,更多相关《数据结构课程设计-大数问题(11页珍藏版)》请在金锄头文库上搜索。

1、大数运算问题的程序设计例 如 : 输 入 第 一 个 数 为 : 1234567890987654321, 输 入 第 二 个 数 为 :1239874355878921367863则 输 出 结 果 : 1234567890987654321*1239874355878921367863=正 确 答 案 。源 程 序 :#include stdio.h #include malloc.h#include string.h#define MAX 20typedef char DataType;typedef struct DataType dataMAX;int top;SeqStack,*P

2、SeqStack; int StackEmpty(PSeqStack S)return S-top=-1; int StackFull(PSeqStack S)return S-top=MAX-1; void Push(PSeqStack S,DataType x)if(StackFull(S)printf(栈 中 元 素 已 经 满 了 !请 先 出 栈 或 把 栈 置 空 !n);S-data+S-top=x; DataType Pop(PSeqStack S)if(StackEmpty(S)printf(栈 为 空 ,无 法 出 栈 ,请 检 查 a!n);return S-dataS-

3、top-; DataType StackTop(PSeqStack S)if(StackEmpty(S)printf(栈 为 空 ,无 法 出 栈 ,请 检 查 !n);return S-dataS-top; void Add(PSeqStack M,PSeqStack N,PSeqStack addnumber) /加 法 函 数 int zongshu,shiweishu=0;if(M-top=N-top)while(M-top!=-1)zongshu=Pop(M)-48+Pop(N)-48+shiweishu;shiweishu=zongshu/10;Push(addnumber,(zo

4、ngshu%10+48);else if(M-topN-top)while(N-top!=-1)zongshu=Pop(M)-48+Pop(N)-48+shiweishu;shiweishu=zongshu/10;Push(addnumber,(zongshu%10+48);while(M-top!=-1)zongshu=Pop(M)-48+shiweishu;shiweishu=zongshu/10;Push(addnumber,(zongshu%10+48);else if(M-toptop)while(M-top!=-1)zongshu=Pop(M)-48+Pop(N)-48+shiwe

5、ishu;shiweishu=zongshu/10;Push(addnumber,(zongshu%10+48);while(N-top!=-1)zongshu=Pop(N)-48+shiweishu;shiweishu=zongshu/10;Push(addnumber,(zongshu%10+48);int Minus(PSeqStack M,PSeqStack N,PSeqStack addnumber) /减 法 函数int j=0;int kk;if(M-top=N-top) for(j=0;jtop;j+)if(M-datajN-dataj)while(N-top!=-1)if(P

6、op(M)=Pop(N)kk=(Pop(M)-48)-(Pop(N)-48);Push(addnumber,(kk+48);elsePush(addnumber,(Pop(M)-48)+10-(Pop(N)-48)+48);Push(M,(Pop(M)-1);j=N-top+1; else if(M-datajdataj)printf(被 减 数 比 减 数 小 !请 检 查 a!n);j=N-top+1; Push(addnumber,0);return 1;else if(M-topN-top) while(N-top!=-1)if(Pop(N)top!=-1)Push(addnumber

7、,Pop(M);return 1;else if(M-toptop)printf(被 减 数 比 减 数 小 !请 检 查 !n);return 0;void change1(int (*P1)40,char s,char P220) /以 下 为 乘 法 函 数static int n=0; int j,i,m=0;for(i=(strlen(P2)-1),j=39-n;i=0;i-,j-)P1nj=(P2i-48)*(s-48)+m)%10; m=(P2i-48)*(s-48)+m)/10;if(m!=0)P1nj=m;n+;void change2(int (*P)40,int* Q,i

8、nt s)int i,j,m=0;for(j=39;j=0;j-) for(i=0;i=0;i-)change1(D,Bi,A);change2(D,C,strlen(B);puts(C);void main()SeqStack M,N,addnumber;int select;size_t i;/char y;char AMAX,BMAX;M.top=-1;N.top=-1; addnumber.top=-1;printf(*请 输 入 第 一 个 大 数 *n);printf(该 数 应 该 长 度 应 小 于 %d 位 n,MAX);gets(A);for(i=0;istrlen(A);

9、i+)Push(/printf(%c,StackTop(printf(*请 输 入 第 二 个 大 数 *n);printf(该 数 应 该 长 度 应 小 于 %d 位 n,MAX);gets(B);for(i=0;istrlen(B);i+)Push(/printf(%c,StackTop(printf(select 1:Add()n); /选 择 加 法printf(select 2:Minus()n); /选 择 减 法printf(select 3:Multiply()n); /选 择 乘 法printf(select 0:exitn); /选 择 退 出printf(input a

10、 your select(0-4):n);scanf(%d, if(select!=0)switch(select) case 1: Add(printf(大 数 加 法 计 算 的 结 果 是 :n);printf(%s+%s=,A,B);while(addnumber.top!=-1)printf(%c,Pop(printf(n);break;case 2:if(Minus(&M,&N,&addnumber) /如 果 返 回 值 为 0则 说 明 被 减 数 比 减 数 小 , 这 样 就 不 用 再 执 行 下 面 的 语 句 了 ;printf(大 数 减 法 计 算 的 结 果 是 :n); printf(%s-%s=,A,B);while(addnumber.top!=-1)printf(%c,Pop(printf(n);break;case 3:printf(大 数 乘 法 计 算 的 结 果 是 :n);printf(%s*%s=,A,B);Multiply(A,B);printf(n);break; 测 试 :1 加法测试:2 乘法测试:2013-07-25-sjn

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

当前位置:首页 > 建筑/环境 > 工程造价

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