我看了百度百科求自幂数的实现算法,真的是长,我就分享下我的代码。
肯定还有改进余地,有时间了(想起来了)再更新。
#include "stdio.h"
#include "math.h"
#include "cstdlib"
int main()
{
//定义一个长长整型变量作为穷举数
long long int shu;
int i;//自幂数的位数
int n;//求位数变量
int weiSum;//每位数的位数次方和
int wei[20];//数组用于存储每位数字
//长长整型最多就19位数,所以定义个20就行了
for(shu=1 ;; shu++){
//算出每位上的数字
for(n = 1, weiSum=0, i=0 ; shu/n > 0 ; n *= 10){
wei[i] = shu / n % 10;
i++;
}
//算出每位数的位数次方和
for(n = 0 ; n <= i ; n++){
weiSum += pow(wei[n], i);
}
//判断
if(weiSum == shu){
printf("%d 这是%d位数的自幂数\n", shu, i);
}
}
}
2020/02/12
我觉得存储每位数字的数组是可以不定义的。
也可以少一个如下循环。
//算出每位上的数字
for(n = 1, weiSum=0, i=0 ; shu/n > 0 ; n *= 10){
wei[i] = shu / n % 10;
i++;
}
原因:
1.定义数组是为了求出每一位数字,再存起来。但是我们只需要算出每位数的位数次方的和。
因此只要能在不存储位数的基础上,求得每位数的位数次方的和就可以不定义数组。
2.在求出每位数字的同时,可以得出这个数究竟有多少位,这是每位数字的幂的次数。
因此只要能用别的结构算出位数,求得每位数字的幂的次数就可以不定义数组。
改进后的代码:(略),因为懒。