C语言:打印0-100000中的自幂数(水仙花数是其中一种)

简介: 思路:总体思路:(一).计算 i 的位数: 使用 for循环 产生 0~100000 的数(变量i)

思路:

总体思路:

(一).

计算 i 的位数

               

使用 for循环产生 0~100000 的数变量i

         

使用一个变量 tmp 代替 i防止后续操作改变循环变量 i

int tmp = i;

         

开始计算 i 的位数

一个数 至少也是 一位数,所以 n 起始1 n = 1;

使用 while循环,如果 tmp/10 不为0,说明有位数位数加一n+1直到 tmp/10 == 0

               

(二).

求每一位的 n次方之和

              因为上一步 tmp /= 10 改变了 tmp 的值,所以要再替换一次 i

tmp = i;

         

创建变量 sum存放每位次方后的和

int sum = 0;

                   

使用 while循环,如果 tmp 不等于 0继续取出当前位进行计算

sum += pow(tmp % 10, n);

pow()函数为求第一个参数的第二个参数次方,需要<math.h>头文件

%10取出当前位后,当前位的n次方,再求和赋给sum

计算完当前位后,移至该数的下一位

tmp /= 10;

                 

(三).

判断 sum 是不是自幂数是则进行打印

       

第一步:

计算 i 的位数

               

(1).

使用 for循环产生 0~100000 的数变量i

      (2).

使用一个变量 tmp 代替 i防止后续操作改变循环变量 i

int tmp = i;

(3).

开始计算 i 的位数

一个数 至少也是 一位数,所以 n 起始1

n = 1;              

使用 while循环,如果 tmp/10 不为0,说明有位数位数加一n+1直到 tmp/10 == 0

                   

实现代码:

#include <stdio.h>
int main()
{
  //使用for循环产生 0~100000 的数:
  int i = 0;
  for (i = 0; i <= 100000; i++)
  {
    //使用变量 tmp 代替 i,防止后续操作改变循环变量:
    int tmp = i; //代替 i
    //计算 i 的位数:
    int n = 1; //位数,因为一个数至少也是一位数,所以n起始为1
    //思路:i/10 --> 可以去掉一位 --> n+1 ,直到 i/10==0
    while (tmp /= 10) //直到tem/10==0,停止循环
    {
      n++;//统计位数
    }
  }
  return 0;
}

实现图片:

1319bf72d7d243fe8652923c55956a1e.png

第二步:

求每一位的 n次方之和

               

(1).

因为上一步 tmp /= 10 改变了 tmp 的值,所以要再替换一次 i

tmp = i;


(2).

创建变量 sum存放每位次方后的和

int sum = 0;

         

(3).

使用 while循环,如果 tmp 不等于 0继续取出当前位进行计算

sum += pow(tmp % 10, n);


pow()函数为求第一个参数的第二个参数次方,需要<math.h>头文件

%10取出当前位后,当前位的n次方,再求和赋给sum

计算完当前位后,移至该数的下一位

tmp /= 10;

实现代码:

#include <stdio.h>
#include <math.h>
int main()
{
  //使用for循环产生 0~100000 的数:
  int i = 0;
  for (i = 0; i <= 100000; i++)
  {
    //使用变量 tmp 代替 i,防止后续操作改变循环变量:
    int tmp = i; //代替 i
    //计算 i 的位数:
    int n = 1; //位数,因为一个数至少也是一位数,所以n起始为1
    //思路:i/10 --> 可以去掉一位 --> n+1 ,直到 i/10==0
    while (tmp /= 10) //直到tem/10==0,停止循环
    {
      n++;//统计位数
    }
    //因为上面改变了 tmp /= 10 ,改变了 tmp 的值,
    //所以要再替换一次 i :
    tmp = i;
    //创建变量 sum 存放该数每一位次方的和:
    int sum = 0;
    //只要 i 不等于0,就继续取出下一位:
    while (tmp)
    {
      //%10,取出一位后,求出该位的n次方,再求和
      sum += pow(tmp % 10, n);
      //计算下一位:
      tmp /= 10;
    }
  }
  return 0;
}

实现图片:

image.png

第三步:

判断 sum 是不是自幂数是则进行打印

                   

实现代码:

#include <stdio.h>
#include <math.h>
int main()
{
  //使用for循环产生 0~100000 的数:
  int i = 0;
  for (i = 0; i <= 100000; i++)
  {
    //使用变量 tmp 代替 i,防止后续操作改变循环变量:
    int tmp = i; //代替 i
    //计算 i 的位数:
    int n = 1; //位数,因为一个数至少也是一位数,所以n起始为1
    //思路:i/10 --> 可以去掉一位 --> n+1 ,直到 i/10==0
    while (tmp /= 10) //直到tem/10==0,停止循环
    {
      n++;//统计位数
    }
    //因为上面改变了 tmp /= 10 ,改变了 tmp 的值,
    //所以要再替换一次 i :
    tmp = i;
    //创建变量 sum 存放该数每一位次方的和:
    int sum = 0;
    //只要 i 不等于0,就继续取出下一位:
    while (tmp)
    {
      //%10,取出一位后,求出该位的n次方,再求和
      sum += pow(tmp % 10, n);
      //计算下一位:
      tmp /= 10;
    }
    //判断sum是不是自幂数
    if (sum == i)
    {
      printf("%d ", i);//是则进行打印
    }
  }
  return 0;
}

实现图片:

image.png

最终代码和实现效果

最终代码:

#include <stdio.h>
#include <math.h>
int main()
{
  //使用for循环产生 0~100000 的数:
  int i = 0;
  for (i = 0; i <= 100000; i++)
  {
    //使用变量 tmp 代替 i,防止后续操作改变循环变量:
    int tmp = i; //代替 i
    //计算 i 的位数:
    int n = 1; //位数,因为一个数至少也是一位数,所以n起始为1
    //思路:i/10 --> 可以去掉一位 --> n+1 ,直到 i/10==0
    while (tmp /= 10) //直到tem/10==0,停止循环
    {
      n++;//统计位数
    }
    //因为上面改变了 tmp /= 10 ,改变了 tmp 的值,
    //所以要再替换一次 i :
    tmp = i;
    //创建变量 sum 存放该数每一位次方的和:
    int sum = 0;
    //只要 i 不等于0,就继续取出下一位:
    while (tmp)
    {
      //%10,取出一位后,求出该位的n次方,再求和
      sum += pow(tmp % 10, n);
      //计算下一位:
      tmp /= 10;
    }
    //判断sum是不是自幂数
    if (sum == i)
    {
      printf("%d ", i);//是则进行打印
    }
  }
  return 0;
}

实现效果:


cb0bdd150414410f90875bfb6cbbef7c.png

 

相关文章
|
3月前
|
C语言
C语言---自幂数(“水仙花数”)
C语言---自幂数(“水仙花数”)
62 0
|
10月前
|
C语言
C语言之水仙花数的求解与二维数组结合,使用函数调用
C语言之水仙花数的求解与二维数组结合,使用函数调用
|
3月前
|
算法 C语言
C语言 0~10000 水仙花数 判断。
C语言 0~10000 水仙花数 判断。
30 0
|
2月前
|
C语言
C语言实现水仙花数与99乘法表
C语言实现水仙花数与99乘法表
18 1
|
2月前
|
存储 C语言 C++
【C语言刷题系列】水仙花数的打印及进阶
【C语言刷题系列】水仙花数的打印及进阶
|
2月前
|
C语言
C语言探索:水仙花数的奥秘与计算
C语言探索:水仙花数的奥秘与计算
23 0
|
3月前
|
C语言
【C语言必刷题】6. 水仙花数
【C语言必刷题】6. 水仙花数
|
3月前
|
机器学习/深度学习 存储 C语言
用C语言轻松找出所有水仙花数
用C语言轻松找出所有水仙花数
用C语言轻松找出所有水仙花数
|
3月前
|
C语言 数据安全/隐私保护
利用C语言揭秘水仙花
利用C语言揭秘水仙花
48 0
|
9月前
|
C语言
【C语言刷题】水仙花数、打印菱形、求和
【C语言刷题】水仙花数、打印菱形、求和
58 0