问题:Armstrong 数,就是n位数的各位数的n次方之和等于该数,如:

153=13+53+3^3
1634=14+64+34+44

代码1:

#include <stdio.h>
int main()
{
int number, originalNumber, remainder, result = 0;printf("输入三位数: ");
scanf("%d", &number);originalNumber = number;while (originalNumber != 0)
{remainder = originalNumber%10;result += remainder*remainder*remainder;originalNumber /= 10;
}if(result == number)printf("%d 是 Armstrong 数",number);
elseprintf("%d 不是 Armstrong 数",number);return 0;
}

运行结果:

输入三位数: 371
371 是 Armstrong

代码2:两数之间的 Armstrong 数

#include <stdio.h>
#include <math.h>int main()
{
int low, high, i, temp1, temp2, remainder, n = 0, result = 0;printf("输入两个整数: ");
scanf("%d %d", &low, &high);
printf("%d 和 %d 之间的 Armstrong 数为: ", low, high);for(i = low + 1; i < high; ++i)
{temp2 = i;temp1 = i;// 计算while (temp1 != 0){temp1 /= 10;++n;}while (temp2 != 0){remainder = temp2 % 10;result += pow(remainder, n);temp2 /= 10;}if (result == i) {printf("%d ", i);}n = 0;result = 0;}
return 0;
}

运行结果:

输入两个整数: 100 1000
100 和 1000 之间的 Armstrong 数为: 153 370 371 407

代码3:使用函数判断Armstrong 数

#include <stdio.h>
#include <math.h>int checkPrimeNumber(int n);
int checkArmstrongNumber(int n);int main()
{
int n, flag;printf("输入正整数: ");
scanf("%d", &n);// 检测素数
flag = checkPrimeNumber(n);
if (flag == 1)printf("%d 是素数。\n", n);
elseprintf("%d 不是素数\n", n);// 检测 Armstrong 数
flag = checkArmstrongNumber(n);
if (flag == 1)printf("%d 是 Armstrong 数。", n);
elseprintf("%d 不是 Armstrong 数。",n);
return 0;
}int checkPrimeNumber(int n)
{
int i, flag = 1;for(i=2; i<=n/2; ++i)
{// 非素数条件if(n%i == 0){flag = 0;break;}
}
return flag;
}int checkArmstrongNumber(int number)
{
int originalNumber, remainder, result = 0, n = 0, flag;originalNumber = number;while (originalNumber != 0)
{originalNumber /= 10;++n;
}originalNumber = number;while (originalNumber != 0)
{remainder = originalNumber%10;result += pow(remainder, n);originalNumber /= 10;
}// 判断条件
if(result == number)flag = 1;
elseflag = 0;return flag;
}

运行结果:

输入正整数: 371
371 不是素数
371 是 Armstrong 数。

参考代码:

#include<stdio.h>
long long power(long long x,int y)
{
long long sum = 1;
while(y--)
{sum *= x;
}
return sum;
}int check_arm(long long n)
{
long long temp,sum = 0,remainder,count = 0;
temp = n;
while(temp*10/10 != 0)
{temp /= 10;++count;
}
temp = n;
while(temp*10/10 != 0)
{sum += power(temp%10,count);temp /= 10;
}
if(n == sum)
{return 1;
}
else
{return 0;
}
}
int main()
{
long long temp,n,result,a,b,i;
int flag;
printf("Please enter a number:\n");
scanf("%lld",&n);
result = check_arm(n);
if(result == 1)
{printf("Yes, it's an Armstrong number.\n\n");
}
else
{printf("No, it isn't an Armstrong number.\n\n");
}
printf("Please enter two numbers as an interregional,seperated by a space.\n");
scanf("%lld %lld",&a,&b);
flag = 1;
if(a == b)
{printf("That is no an valid interregional.\n");flag = 0;
}
else if(a > b)
{temp = a;a = b;b = temp;
}
if(flag == 1)
{printf("Armstrong number(s) between %lld and %lld is(are):\n",a,b);for(i = a;i<=b;i++){if(check_arm(i) == 1){printf("%lld ",i);}}
}
return 0;
}

2>

#include <stdio.h>
int main(){
int low,high;
scanf("%d %d",&low,&high);
while(low<=high){if(arm(low)==1)    printf("%d \t",low);low++;
}}int arm(int a){int b=0,c=0,e=0; //初始化
c=a;
while(c>0){if(c%10>=0) e++;c =c/10;
}
c=a;
while(a>0){b=b+pow(a%10,e);a=a/10;
}
if(c==b) return 1;
else return 0;
}

C语言:判断Armstrong数(阿姆斯壮数)相关推荐

  1. C语言复习之判断Armstrong数(阿姆斯壮数)

    首先我们来了解一下什么是Armstrong数(阿姆斯壮数) 在百度百科上阿姆斯壮数是这样说的:Armstrong 数,就是n位数的各位数的n次方之和等于该数 比如: 153=1^3+5^3+3^3 1 ...

  2. C语言判断一个数是否是回文数

    C语言判断一个数是否是回文数 #include <stdio.h> int main(){int num, s, y = 0;printf("请输入一个数字: ");s ...

  3. (c语言)判断一个正整数是否是回文数

    (c语言)判断一个正整数是否是回文数 回文数是指从左到右和从右到左读这个数是一样的.例如:1,101,1221都是回文数. #include<stdio.h> #include<st ...

  4. C语言判断一个数是否是回文数Palindrome算法(附完整源码)

    判断回文数Palindrome的算法 判断回文数Palindrome的算法完整源码(定义,实现,main函数测试) 判断回文数Palindrome的算法完整源码(定义,实现,main函数测试) #in ...

  5. c语言打印出水花数,四叶玫瑰数,五角星数等等的数字

    求出0-999999之间的所有"水仙花数"并输出. "水仙花数"是指一个三位数,其各位数字的立方和确好等于该数本身, 如:153=13+53+3^3?,则153 ...

  6. hdu - 2512 一卡通大冒险 (斯特灵数 贝尔数)

    http://acm.hdu.edu.cn/showproblem.php?pid=2512 /** 题意:给你k张不同的卡放到n本书里有多少种放法?(n是无限大) 典型的 斯特灵数第二类 +贝尔数 ...

  7. ACM常用数列(斐波那契数列、卡特兰数、贝尔数、斯特灵数)

    斐波那契数列:任意一个数是其前两位数只和,即f(i)=f(i-1)+f(i-2),f(1)=f(2)=1 该数列也满足黄金分割比例,所以又成为黄金分割数列 相关题目链接:Fibbonacci Numb ...

  8. 3.2.4乔姆斯基的语言观2

    自然语言的使用需要说出或写下符号才算完成.人类婴幼儿对母语的学习,是从父母.周围其他人的讲话,不断接收实际例子,以熟悉不同场景下字.词.复合词.词组等素材的使用,以及各种组合方式的使用:然后自己不断实 ...

  9. C语言判断数组中是否存在该数

    C语言判断数组中是否存在该数 #include<stdio.h> int main() {int query(int a[10],int num);int num;printf(" ...

最新文章

  1. 云从科技上交大提出DCMN+ 模型,在多项阅读理解数据集上成绩领先
  2. 巴斯腾和巴乔谁强一些
  3. CCIE实验之路由重分布之重分布的原则
  4. 管理文库]我喜欢的10个经典管理学定律点评
  5. 从领导身上学习到的几个观点
  6. 【APP Web架构】企业web高可用集群实战之haproxy篇续(二)
  7. 进一步考察与UI相关的安全漏洞-上
  8. 送给程序员终身受用的建议
  9. 在php中怎么用js跳转页面跳转,在php中怎么用redirect实现页面跳转?
  10. 常用的优化方法-梯度下降、牛顿法、坐标下降法
  11. linux自动截屏脚本,Android实现自动截图脚本
  12. 经典排序之 归并排序
  13. python编程入门教学视频-Python编程入门电子书及视频教程-非常详细『强烈推荐』...
  14. 基于FreeFEM++的有限元编程--2
  15. SIM800(GPRS)拨号上网失败未能连接服务器
  16. 【Matlab土壤分类】多类SVM土壤分类【含GUI源码 1398期】
  17. 23王道——中序线索树
  18. w7计算机用户密码设置,Win7开机密码怎么设置 Win7电脑设置开机密码图文教程
  19. 车机安卓+linux成本,你的车机为什么比千元安卓机还难用?
  20. 献给和我一样迷茫的人们,9天准备笔试上岸中科大MPM工程硕士的心路历程(8820字)

热门文章

  1. # python模拟各大网站登陆方式, 包括爬虫--你们要的全都有
  2. 软考中级软件设计师——操作系统
  3. NewStarCTF week5 web 部分题解
  4. 【BIEB六人行活动】解决文档共享难题的优化思路小结
  5. 微信的分享功能(针对web手机站页面进行的分享功能)
  6. [转]nginx和php-fpm调用方式
  7. windows系统自带压缩解压命令
  8. java math 保留_java怎么保留两位小数?具体方法是什么?
  9. 毕业论文的论文致谢与编写
  10. python 根据C盘卷号进行 加密解密,可以用做软件激活码