中国高校课件下载中心 》 教学资源 》 大学文库

《C++语言》课程教学资源(PPT课件讲稿)第七章 计算用户输入的一个正整数各位之和

文档信息
资源类别:文库
文档格式:PPS
文档页数:28
文件大小:93KB
团购合买:点击进入团购
内容简介
问题计算用户输入的一个正整数各位之和。 分析为完成问题所提出的任务,首先必须将该整数的各位分 离出来。分离各位数有两种方案:一种是从高向低逐位分离 ;另一种则反之。然而,前者必须知道用户所输入之数据的 位数,并用不同的数来逐级除该数。利用后者则可以采用一 种简单的算法:反复地分离出个位数将数据降低一个数量 级,直到无数据可分离。每分离出一个个位数,就将它加到 一个累加器中。
刷新页面文档预览

问题计算用户输入的一个正整数各位之和。 分析为完成问题所提出的任务,首先必须将该整数的各位分 离出来。分离各位数有两种方案:一种是从高向低逐位分离 另一种则反之。然而,前者必须知道用户所输入之数据的位 数,并用不同的数来逐级除该数。利用后者则可以采用一种 简单的算法:反复地分离出个位数、将数据降低一个数量级 直到无数据可分离。每分离出一个个位数,就将它加到一个 累加器中

问题 计算用户输入的一个正整数各位之和。 分析 为完成问题所提出的任务,首先必须将该整数的各位分 离出来。分离各位数有两种方案:一种是从高向低逐位分离; 另一种则反之。然而,前者必须知道用户所输入之数据的位 数,并用不同的数来逐级除该数。利用后者则可以采用一种 简单的算法:反复地分离出个位数、将数据降低一个数量级, 直到无数据可分离。每分离出一个个位数,就将它加到一个 累加器中

开始 Sum <0 n<d%10 d<d/10 d←用户输入的数据 d=0 输出Sum 分离个位数 降低数量级 结束 Sum←Sum+分离出的数

开始 Sum  0 分离个位数 降低数量级 d = 0 Sum  Sum + 分离出的数 输出Sum d  用户输入的数据 结束 Y n  d % 10 d  d / 10

#include void maino unsigned long ulData int sum =0 cout> ulData cout < ulData <<"- while(ulData I=0) sUm += ulData %10 ulData =10 cout < sUm < endl

#include void main() { unsigned long ulData; int nSum = 0; cout > ulData; cout "; while(ulData != 0) { nSum += ulData % 10; ulData /= 10; } cout << nSum << endl; }

问题输出所有“水仙花数” 分析所谓水仙供花数是指与其各位之平方和相等的三位数 于是可知解题空间为100~1000;其关键问题是分离被测数 据的各位 由于位数较少,于是可以考虑用3个变量来记录分离出的每 位数(若位数较多,则应考虑使用数组),同时还应当设 置一个用来标识当前分离的是哪一位的变量

问题 输出所有“水仙花数”。 分析 所谓水仙供花数是指与其各位之平方和相等的三位数。 于是可知解题空间为 100~1000;其关键问题是分离被测数 据的各位。 由于位数较少,于是可以考虑用 3 个变量来记录分离出的每 一位数(若位数较多,则应考虑使用数组),同时还应当设 置一个用来标识当前分离的是哪一位的变量

#include void maino nt nMult, n, nStep, nOne, n Ten, nHundred for(inti=100;1<1000;i++) ∥确定测试范围 n =I ∥保存当前测试数 nStep =0; ∥标记初始化 while(n) nMult=n 10 nMult= nMult nMult* nMult: switch(n Step ∥当前分离哪一位 case 0 nOne nMult break

#include void main() { int nMult, n, nStep, nOne, nTen, nHundred; for(int i = 100; i < 1000; i ++) { // 确定测试范围 n = i; // 保存当前测试数 nStep = 0; // 标记初始化 while(n) { nMult = n % 10; nMult = nMult * nMult * nMult; switch(nStep) { // 当前分离哪一位 case 0: nOne = nMult; break;

case 1 nTen nMult break. case 2 hUndred nMult n/=10 nStep + ∥/准备分离下一位 i(i==nOne+nen+ hundred)是水仙花数吗 cout <<i<< endl

case 1: nTen = nMult; break; case 2: nHundred = nMult; } n /= 10; nStep ++; // 准备分离下一位 } if(i == nOne + nTen + nHundred) // 是水仙花数吗 cout << i << endl; } }

在上述程序中,注意到所处理的数据均为3位数,并注意到 作为记录当前处理位数的变量 nStep的取值分别为0,1,2。 于是可以考虑将一个3位数所分离出来的各位数用一个大小 为3的数组来存放,从而可以简化程序

在上述程序中,注意到所处理的数据均为 3 位数,并注意到 作为记录当前处理位数的变量 nStep 的取值分别为 0,1,2。 于是可以考虑将一个 3 位数所分离出来的各位数用一个大小 为 3 的数组来存放,从而可以简化程序

#include void maino int nMult, n, nStep, nNum[3] for(nti:=100:1<1000++){ n= nStep =0; while(n) I nMult= n %10 nMult= nMult nMult* nMult nNum[n Step]= nMult

#include void main() { int nMult, n, nStep, nNum[3]; for(int i = 100; i < 1000; i ++) { n = i; nStep = 0; while(n) { nMult = n % 10; nMult = nMult * nMult * nMult; nNum[nStep] = nMult;

n/=10; nStep + if(i== nNum[o]+ nNum[1]+ nNum[2D cout <<i<< endl

n /= 10; nStep ++; } if(i == nNum[0] + nNum[1] + nNum[2]) cout << i << endl; } }

问题编写函数输出指定数以内的“完数” 分析所谓完数是指与其因子(包括1)之和相等的正整数 由问题可知解决方案可以分为两步: 1分解并保存数i的各因数 2.检测i是否是一个完数,若是则按指定格式输出

问题 编写函数输出指定数以内的“完数”。 分析 所谓完数是指与其因子(包括 1)之和相等的正整数。 由问题可知解决方案可以分为两步: 1. 分解并保存数 i 的各因数; 2. 检测 i 是否是一个完数,若是则按指定格式输出

共28页,试读已结束,阅读完整版请下载
刷新页面下载完整文档
VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
相关文档