



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【题目】数学上定义:n!=123.(n-1)n (N0)0!=1若用integer型数据表示阶乘,最多可到7!,用Longint类型也只能到12!要求输入正整数n,求 n! 的精确表示【算法分析】用数组存放结果,模拟人工计算过程,逐位去乘,注意进位情况的处理。【参考程序】const max=1000;var n,i,j,jinwei,weishu:integer;result:array1.max of integer; result 数组放结果beginwriteln(input n:);readln(n); 输入nfillchar(result,sizeof(result),0);result1:=1; 从1开始乘起jinwei:=0; jinwei:进位weishu:=1; weishu:结果的位数for i:=2 to n do begin 从2开始,一直乘到njinwei:=0; 进位预置为0for j:=1 to weishu do begin i,用result数组逐位去乘resultj:=resultj*i+jinwei; 加上上一次的进位jinwei:=resultj div 10; 逢10进位,生成新的进位resultj:=resultj mod 10; result数组只放10以内的数字end;while jinwei0 do begin 一轮算完后,有新的进位时weishu:=weishu+1; 位数加1resultweishu:=jinwei mod 10; 循环处理进位,直到为0jinwei:=jinwei div 10; 因为进位可能不只一位数end;if weishumax then begin writeln(error!);halt;end;超过预定位数,出错end;write(n,!=);for i:=weishu downto 1 do write(resulti);readln; 输出end.【参考程序】var a:array1.10000 of integer;b,c,d,t,x:integer;beginwrite (input number:);readln (x);if (x=10 then if (t=d) then d:=d+1; 假如最后一位乘时有进位,则总位数加1at:=at mod 10;inc (t); 数组下一位until (td); 直到乘完数组的每一位数字end;write (x,!=);for t:=d downto 1 do write (at); 输出end.【题目】求的值。(与的位数均不超过位)【算法分析】由于与的位数太大,所以必须用高精度运算。与高精度阶乘不同之处在于,如何处理部分积相加的问题.两数相乘的高精度运算,其实即是用计算机来模拟手工进行两数相乘。试看 n=811,m=98 的情况:811 用m的每一位(从低位到高位)去乘n的每一位, 98-64887299 -注意这里如何处理相加.同理,m的百位,千位.- 乘n后的结果如何相加,也要处理好.79478【参考答案】123456789*123456789=152415787501905211111111*111=1233333219999999*99=989999901987654321*987654321=97546105778997104199999999999999999999*99999999999999999999=9999999999999999999800000000000000000001【参考程序】const max=10000;var i,j,jinwei,weishu:integer;n,m:string;n_length,m_length:integer;result:array1.max of integer;beginwriteln(input n:);readln(n); m,n均用字符串输入writeln(input m:);readln(m);fillchar(result,sizeof(result),0);n_length:=length(n); n_length:被乘数n的位数m_length:=length(m); m_length:乘数m的位数for i:=1 to m_length do begin 用m的每个数字去乘njinwei:=0; 预置进位为0for j:=1 to n_length do begin 因n也是大数,故要一位一位地去乘resultj+i-1:=(ord(nn_length+1-j)-48)*(ord(mm_length+1-i)-48)+jinwei+resultj+i-1;相乘的结果放数组result,其下标j+i-1同时反应了应该加在哪个位上注意要把字符串的数字转换成数值才能相乘jinwei:=resultj+i-1 div 10; 处理进位resultj+i-1:=resultj+i-1 mod 10;end;weishu:=n_length+i-1; 乘完一轮后,已有的位数while jinwei0 do begin 处理乘完一轮后,产生的进位weishu:=weishu+1;resultweishu:=(jinwei+resultweishu);jinwei:=(resultweishu) div 10;resultweishu:=(resultweishu) mod 10;end;if weishuma
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 出租车防盗知识培训课件
- 日本的节日介绍课件
- 2025重庆统景旅游开发有限公司招聘9人笔试参考题库附答案解析
- 北师大版小学六年级上册 第五章第一节 扇形统计图 同步练习(含解析)
- 2025辽宁省能源控股集团所属清洁能源公司招聘2人笔试模拟试题及答案解析
- 2025解放军总医院京北医疗区社会用工招聘3人笔试模拟试题及答案解析
- 2025广西北海市铁山港区中小学幼儿园后勤服务人员控制数公开招聘22人笔试参考题库附答案解析
- 出租车急救知识培训课件
- 2025浙江丽水青田县中学面向全县教育系统选聘教师考试备考题库及答案解析
- 医学影像学海马硬化
- 甲状腺癌病例分享
- 文化艺术活动策划与执行方案
- 意识障碍护理评估要点
- 药液外渗护理不良事件
- 浙江省湖州市2024-2025学年高一下学期期末考试数学试卷
- GB/T 45695-2025空铁旅客联运服务质量要求
- 2025至2030中国酒店用品行业产业运行态势及投资规划深度研究报告
- 青少年研学营地行业跨境出海项目商业计划书
- 高纯气体不锈钢管道施工方案
- 2025-2030年中国汽车电机行业供需分析及发展前景研究报告
- 生产班组考核方案
评论
0/150
提交评论