一个N位数的各位数的N次方之和等于这个数,称为armstrong数,求用C语言编写一个程序求出所有2,3,4位数的armstrong数。
#include<stdio.h>
#include<stdlib.h>
#define MAX_NUMBER_LENGTH 10
/*计算阶乘
参数:
n 基数
p 幂,大于等于 0
返回:
n的p次方
*/
int myPow(int n,unsigned int p)
{
int r=1;
while(p--) r*=n;
return r;
}
/*计算指定长度的 armstrong 数
参数:
length armstrong数的位数
返回:
长度为 length 的armstrong数个数
*/
int armstron(int length )
{
int counter=0;
int min=myPow(10,length-1);
int max=myPow(10,length)-1;
int i,j,n,sum;
int stack[MAX_NUMBER_LENGTH],stackTop=-1;
// 遍历所有长度为 length 的数字
for(i=min;i<=max;i++)
{
n=i;
stackTop=-1;
// 分离出数字 n 的每一位
do
{
stack[++stackTop]=n%10;
n/=10;
}while(n);
n=i;
// 求数字 n 的每一位N次方之和
sum=0;
for(j=0;j<=stackTop;j++)
{
sum+=myPow(stack[j],stackTop+1);
}
// 数字 n 每一位N次方之和等于 n,即为 armstrong 数。输出。
if(sum==n)
{
printf("%d = ",n);
for(j=stackTop;j>=0;j--)
{
printf("%d^%d",stack[j],(stackTop+1));
if(j>0)
printf(" + ");
}
printf("\n");
}
}
}
int main()
{
int len;
for(len=2;len<=4;len++)
{
armstron(len);
}
system("pause");
}
/*
153 = 1^3 + 5^3 + 3^3
370 = 3^3 + 7^3 + 0^3
371 = 3^3 + 7^3 + 1^3
407 = 4^3 + 0^3 + 7^3
1634 = 1^4 + 6^4 + 3^4 + 4^4
8208 = 8^4 + 2^4 + 0^4 + 8^4
9474 = 9^4 + 4^4 + 7^4 + 4^4
*/
#include<stdlib.h>
#define MAX_NUMBER_LENGTH 10
/*计算阶乘
参数:
n 基数
p 幂,大于等于 0
返回:
n的p次方
*/
int myPow(int n,unsigned int p)
{
int r=1;
while(p--) r*=n;
return r;
}
/*计算指定长度的 armstrong 数
参数:
length armstrong数的位数
返回:
长度为 length 的armstrong数个数
*/
int armstron(int length )
{
int counter=0;
int min=myPow(10,length-1);
int max=myPow(10,length)-1;
int i,j,n,sum;
int stack[MAX_NUMBER_LENGTH],stackTop=-1;
// 遍历所有长度为 length 的数字
for(i=min;i<=max;i++)
{
n=i;
stackTop=-1;
// 分离出数字 n 的每一位
do
{
stack[++stackTop]=n%10;
n/=10;
}while(n);
n=i;
// 求数字 n 的每一位N次方之和
sum=0;
for(j=0;j<=stackTop;j++)
{
sum+=myPow(stack[j],stackTop+1);
}
// 数字 n 每一位N次方之和等于 n,即为 armstrong 数。输出。
if(sum==n)
{
printf("%d = ",n);
for(j=stackTop;j>=0;j--)
{
printf("%d^%d",stack[j],(stackTop+1));
if(j>0)
printf(" + ");
}
printf("\n");
}
}
}
int main()
{
int len;
for(len=2;len<=4;len++)
{
armstron(len);
}
system("pause");
}
/*
153 = 1^3 + 5^3 + 3^3
370 = 3^3 + 7^3 + 0^3
371 = 3^3 + 7^3 + 1^3
407 = 4^3 + 0^3 + 7^3
1634 = 1^4 + 6^4 + 3^4 + 4^4
8208 = 8^4 + 2^4 + 0^4 + 8^4
9474 = 9^4 + 4^4 + 7^4 + 4^4
*/
温馨提示:答案为网友推荐,仅供参考
第1个回答 推荐于2018-05-10
#include<stdio.h>
void main()
{
int n=0,i,a,b,c,d;
printf("两位armstrong数如下:\n");
for(i=10;i<100;i++)
{
a=i/10;
b=i%10;
if (i==a*a+b*b)
{
printf("%d",i);
n++;
if(n%10==0)
{
printf("\n");
}
}
}
n=0;
printf("三位armstrong数如下:\n");
for(i=100;i<1000;i++)
{
a=i/100;
b=(i%100)/10;
c=i%10;
if(i==a*a*a+b*b*b+c*c*c)
{
printf("%d ",i);
n++;
if(n%10==0)
printf("\n");
}
}
printf("\n");
n=0;
printf("四位armstrong数如下:\n");
for(i=1000;i<10000;i++)
{
a=i/1000;
b=(i%1000)/100;
c=(1%100)/10;
d=i%10;
if(i==a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d)
{
printf("%d ",i);
n++;
if(n%10==0)
{
printf("\n");
}
}
}
printf("\n");
}
源代码如上,经编译运行成功,可以拿去用。不过我建议以后的程序还是自己些比较好。因为时间比较紧,所以没有写注释,见谅哈!!!本回答被网友采纳
void main()
{
int n=0,i,a,b,c,d;
printf("两位armstrong数如下:\n");
for(i=10;i<100;i++)
{
a=i/10;
b=i%10;
if (i==a*a+b*b)
{
printf("%d",i);
n++;
if(n%10==0)
{
printf("\n");
}
}
}
n=0;
printf("三位armstrong数如下:\n");
for(i=100;i<1000;i++)
{
a=i/100;
b=(i%100)/10;
c=i%10;
if(i==a*a*a+b*b*b+c*c*c)
{
printf("%d ",i);
n++;
if(n%10==0)
printf("\n");
}
}
printf("\n");
n=0;
printf("四位armstrong数如下:\n");
for(i=1000;i<10000;i++)
{
a=i/1000;
b=(i%1000)/100;
c=(1%100)/10;
d=i%10;
if(i==a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d)
{
printf("%d ",i);
n++;
if(n%10==0)
{
printf("\n");
}
}
}
printf("\n");
}
源代码如上,经编译运行成功,可以拿去用。不过我建议以后的程序还是自己些比较好。因为时间比较紧,所以没有写注释,见谅哈!!!本回答被网友采纳
第2个回答 2012-03-15
#include <stdio.h>
void main()
{
int j,k,l,m; //依次代表个位数,十位数,百位数,千位数
for(int i=10;i<99;i++)
{
j=i%10;
k=i/10;
if(i==(j*j+k*k))
printf("%d\n",i);
}
for(int i=100;i<=999;i++)
{
j=i%10;
k=(i%100)/10;
l=i/100;
if(i==(j*j*j+k*k*k+l*l*l))
printf("%d\n",i);
}
for(int i=1000;i<=9999;i++)
{
j=i%10;
k=(i%100)/10;
l=(i%1000)/100;
m=i/1000;
if(i==(j*j*j*j+k*k*k*k+l*l*l*l+m*m*m*m))
printf("%d\n",i);
}
}本回答被提问者采纳
void main()
{
int j,k,l,m; //依次代表个位数,十位数,百位数,千位数
for(int i=10;i<99;i++)
{
j=i%10;
k=i/10;
if(i==(j*j+k*k))
printf("%d\n",i);
}
for(int i=100;i<=999;i++)
{
j=i%10;
k=(i%100)/10;
l=i/100;
if(i==(j*j*j+k*k*k+l*l*l))
printf("%d\n",i);
}
for(int i=1000;i<=9999;i++)
{
j=i%10;
k=(i%100)/10;
l=(i%1000)/100;
m=i/1000;
if(i==(j*j*j*j+k*k*k*k+l*l*l*l+m*m*m*m))
printf("%d\n",i);
}
}本回答被提问者采纳