首页 > 分享 > 面向对象程序设计——计算阿姆斯特朗数(C++)

面向对象程序设计——计算阿姆斯特朗数(C++)

最新推荐文章于 2024-07-04 12:56:13 发布

ymy_forever 于 2020-10-02 19:25:43 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

题目描述

编写一个程序,读入两个正整数a和b,其中a<=b, 计算并输出闭区间[a,b]中的阿姆斯特朗数。阿姆斯特数为各个数位上数字的立方和等于其自身的数字,例如:

153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3 // 153 is an Armstrong number.
12 is not equal to 1 * 1 * 1 + 2 * 2 * 2 // 12 is not an Armstrong number.
【输入形式】

输入为两个正整数(在问题描述中记作a和b,程序中请自定变量名),a和b使用1个空格分隔。

【输出形式】

输出闭区间[a,b]中的所有阿姆斯特朗数。

数据之间用换行符分隔。

最后的一行输出后面无换行符。

如果输入错误,输出提示信息error。

如果没有找到阿姆斯特朗数,输出提示信息no。

【样例输入1】

100 400
【样例输出1】

153
370
371
【样例输入2】

-6 7
【样例输出2】

error
【样例输入3】

12 12
【样例输出3】

no
【样例说明】

不要显示多余的提示信息,避免输出判定错误。

注意判断输入信息是否符合要求。

解题思路

阿姆斯特朗数也就是水仙花数,这种题型比较常规,关键是掌握如何得到一个整数的每一位。那么如何得到呢?比如对于整数1234,要想获得个位上的数字只需要 1234 % 10 = 4 1234%10=4 1234%10=4,但是十位上的数字该怎么办?这个时候只需要将1234整体右移一位即可,即整体减小十倍 1234 / 10 = 123 1234/10=123 1234/10=123,这个时候,再求新的个位数即可。

代码如下:

#include <iostream> using namespace std; void findam(int a,int b){ int j,k; int tem_sum; int tem; int tem_i; int all[100];//由于输出格式的要求,需要存储每一个阿姆斯特朗数 int n=0;//统计阿姆斯特朗数的个数 for(int i=a;i<=b;i++){//遍历区间内的每一个数 j=10; tem_sum=0; //统计立方和 tem_i=i; while(tem_i>0){ tem = tem_i%j; tem_sum += tem*tem*tem; tem_i/=j; } if(i==tem_sum){//若立方和与原数相同,则该数为阿姆斯特朗数 all[n++]=i; } } if(n==0) //按照题目所给条件输出 cout<<"no"; else{ cout<<all[0]; for(k=1;k<n;k++){ cout<<endl<<all[k]; } } } int main() { int a,b; cin>>a; cin>>b; if(a<=0||b<=0||a>b)//若输入的a、b不满足为正整数且a<=b,则输出错误 cout<<"error"; else{ findam(a,b); } return 0; }

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647

相关知识

计算水仙花数(广义)
水仙花数C语言代码优化
C语言:输出所有的水仙花数
面向对象的病虫害数据库研究与建立
C++中重载、重写(覆盖)的区别实例分析
基于C++实现(控制台)商品库存管理系统
类和对象(上)
C语言判断水仙花数
要求返回三位数中的水仙花数 ,数字范围在100
C++: 水仙花数

网址: 面向对象程序设计——计算阿姆斯特朗数(C++) https://m.huajiangbk.com/newsview847213.html

所属分类:花卉
上一篇: 虎标2022云醒茉莉花茶评测:不
下一篇: 小伙花10000买三台音箱,魔3