求幂之和的c语言程序

求幂之和的c语言程序,第1张

1,for循环的条件错了,应该是大于号。

2,math.h中的函数用的时候猛碰要慎重,这些都是用来做复杂的数学计算的,时间开销都很大。

3,求余只能对整数 *** 作,这点是必然的。但浮点数是枝举谈可答慧以转换成整数的,可以用强制类型转换,或者设一个整型的中间变量。注意浮点数转整数的时候是舍入的。当然,这里只是说这个事,不建议这样做。

建议的做法有两个,简单点延用原有的思路,可以自己写一个求10的k次方的函数,用整数进行运算。

int pow10n( int k )

{

r = 1

for(i=0i <k ++i)

r *= 10

return r

}

复杂点的做法是把求10的k次方这个运算和拆分n的循环嵌在一起,这个应该是正统的做法。

for( k=0k<3++k )

{

n %= 10

}

当然,这个算法得到的结果是逆序的,4、3、2、1

这有两个办法,一个是把结果顺序放到数组中,输出的时候把顺序倒过来,说白了是用中间变量。

另外一个办法是用栈,或者用递归(本质上也是用的栈),直接按逆序出结果。当然,这个方法对初学者有点难度了。

#include<stdio.h>

#include<math.h>

int main()

{

    int sum=0

    int n,a

 乱凳   scanf("%d", &n)

    for (int i=1i<=ni++)

   宏扰 {

        a=pow(2,i)

        sum=+sum

    }

    printf("%d\n"哗绝旅, sum)

    

    return 0

}

#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=mini<=maxi++)

{

n=i

stackTop=-1

// 分离出数字 n 的每一位

do

{

stack[++stackTop]=n%10

n/=10

}while(n)

n=i

// 求数字 n 的每一位N次方之和

sum=0

for(j=0j<=stackTopj++)

{

sum+=myPow(stack[j],stackTop+1)

}

// 数字 n 每一位N次方之和等于 n,即为 armstrong 数。输出。

if(sum==n)

{

printf("盯昌%d = ",n)

for(j=stackTopj>=0j--)

{

printf("%d^%d",stack[j],(stackTop+1))

if(j>0)

printf(" + ")

}

printf("\n"陪则桥)

}

}

}

int main()

{

int len

for(len=2len<=4len++)

{

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

*/芦猛


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12379837.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存