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