问题计算用户输入的一个正整数各位之和。 分析为完成问题所提出的任务,首先必须将该整数的各位分 离出来。分离各位数有两种方案:一种是从高向低逐位分离 另一种则反之。然而,前者必须知道用户所输入之数据的位 数,并用不同的数来逐级除该数。利用后者则可以采用一种 简单的算法:反复地分离出个位数、将数据降低一个数量级 直到无数据可分离。每分离出一个个位数,就将它加到一个 累加器中
问题 计算用户输入的一个正整数各位之和。 分析 为完成问题所提出的任务,首先必须将该整数的各位分 离出来。分离各位数有两种方案:一种是从高向低逐位分离; 另一种则反之。然而,前者必须知道用户所输入之数据的位 数,并用不同的数来逐级除该数。利用后者则可以采用一种 简单的算法:反复地分离出个位数、将数据降低一个数量级, 直到无数据可分离。每分离出一个个位数,就将它加到一个 累加器中
开始 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 <iostream. h> void maino unsigned long ulData int sum =0 cout<<"'请输入一个正整数:"; cin >> ulData cout < ulData <<"- while(ulData I=0) sUm += ulData %10 ulData =10 cout < sUm < endl
#include <iostream.h> void main() { unsigned long ulData; int nSum = 0; cout << "请输入一个正整数:"; cin >> ulData; cout << ulData << "->"; while(ulData != 0) { nSum += ulData % 10; ulData /= 10; } cout << nSum << endl; }
问题输出所有“水仙花数” 分析所谓水仙供花数是指与其各位之平方和相等的三位数 于是可知解题空间为100~1000;其关键问题是分离被测数 据的各位 由于位数较少,于是可以考虑用3个变量来记录分离出的每 位数(若位数较多,则应考虑使用数组),同时还应当设 置一个用来标识当前分离的是哪一位的变量
问题 输出所有“水仙花数”。 分析 所谓水仙供花数是指与其各位之平方和相等的三位数。 于是可知解题空间为 100~1000;其关键问题是分离被测数 据的各位。 由于位数较少,于是可以考虑用 3 个变量来记录分离出的每 一位数(若位数较多,则应考虑使用数组),同时还应当设 置一个用来标识当前分离的是哪一位的变量
#include <iostream. h> 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 <iostream.h> 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;