网站大量收购独家精品文档,联系QQ:2885784924

第四讲函数指针和高精度计算.ppt

  1. 1、本文档共67页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四讲函数指针和高精度计算资料

* * #include iostream using namespace std; #define MAX_LEN 310 int main() { int n,m,i,j,k; cin n; int res[MAX_LEN] = { 0 }; res[MAX_LEN-1] = 1; m = 1; //当前结果为m位数 for(j = 0; j n; j ++) //2的n次幂 { for(i = MAX_LEN-1, k = m; i = 0 k = 1; i --, k --) //从低位往高位依次运算 res[i] *= 2; for(i = MAX_LEN-1; i 0; i--) //进位 { if(res[i] = 10) { res[i] -= 10; res[i - 1] ++; if(MAX_LEN-i == m) m ++; } } } for(i = 0; res[i] == 0 i MAX_LEN; i++); for(; i MAX_LEN; i++) cout res[i]; cout endl; return 0; } * * 解法2 主要流程 1、读入输入记录的个数 2、对每个输入记录,分别读入各参数,并初始化Field数组 3、用qsort将Field数组排序 4、开始采摘 初始化耗时 FOR循环:从大到小遍历Field数组,直至超时或超Field数组中记录个数 计算所有摘取的花生数 计算总耗时,加上采摘并走到下一个节点的时间 5、输出 * 程序设计过程 提出问题 建立数学模型 设计算法 程序实现 * 提出问题 明确程序的已知条件、原始数据、输入、处理的数据类型、输出的形式和精度 * 建立数学模型 将原始问题简化、抽象、转换成适合计算机处理的数据结构、公式 选择合适的数据类型以及存储调用方式(需要注意的:数据的类型、数据的精度、数据的生命周期) 建立数据之间的关系即公式 * 设计算法 使用计算机可以实现的方法描述数据和数据之间的关系 选择合适的程序流,使用流程图描述程序流 * 程序实现 编写程序、调试运行、测试验证、保存编译等 良好程序风格 输入输出 声明数据,申请存储空间 实现程序流 * 高精度计算 高精度计算: C/C++中int类型表示范围:-231~231-1 unsigned类型表示范围:0~232-1 因此均不超过10位整数 即使用很大数字范围的double有时也不能满足要求 大整数的表示和存放 用数组来存放和表示,一个数组元素存放大整数的一位 例题:编程实现两个N位内高精度正整数的加法。(N已知,100 – 1000内) * 存储两个输入的N位数字 char digital1[1001] char digital2[1001] int sum[1001] 从低位往高位依次运算 存储输出的 N+1 位数字 * Int digit[MAXLEN],N,i 输入整数N i++; if i=N digit数组进行对应位置加法 初始化变量 输出digit Yes No * 需要注意的几个问题 大整数的读入 不能用数值型的读入方式 用字符串的读入方式,再按字符分别转成数字 计算过程中考虑进位和借位问题(先不急于处理,在计算结束时处理) 数组第i元素=10(或0)需要考虑 从上位增或减1,本位减或加10 输出时注意跳过高位时多余的0 数组需要稍微大一些,避免运算时溢出 * 例题 高精度计算:编程精确计算2的N次方。(N是介于100和1000之间的整数) * 解决第一步——提出问题 明确程序的已知条件、原始数据、输入、处理的数据类型、输出的形式和精度 Input : N as Integer Output : 2的N次方=????? * 解决第一步——提出问题 可以计算输出结果的位数 输出为一个0.31N位整数 * 解决第二步——建立数学模型 将原始问题简化、抽象、转换成适合计算机处理的数据结构、公式等 关键在于如何存储数据: 选择合适的数据类型——整型数组 运算关系: 十进制的多位数乘法法则,每一位分别乘2,满十进一 * 解决第三步——设计算法 找到一个合适的能在计算机上实现的解题方法与步骤,并且精确、清楚地描述出来 流程图 * 解决第三步——设计算法 Int digit[310],N,i 输入整数N i++; if i=N digit数组进行十进制乘二操作 初始化变量 输出digit

文档评论(0)

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

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

1亿VIP精品文档

相关文档