打印100~999之间三位数每一位的积等于每一位的和的数字以及这些数的总数

打印100~999之间三位数每一位(个十百)的积等于每一位(个十百)的和的数字以及这些数的总数

  1. 首先需要一个循环,遍历所有的三位数,即100~999

    for (int i = 100; i < 1000; i++)

  2. 然后需要取它们的个位、十位和百位

    假设三位数123
    123 / 1 == 123
    123 / 1 % 10 == 3
    
    123 / 10 == 12
    123 / 10 % 10 == 2
    
    123 / 100 == 1
    123 / 100 % 10 == 1
    
    1. 法一: 分别求出个位、十位和百位

      a = i / 1 % 10 //个位

      b = i / 10 % 10 //十位

      c = i / 100 % 10 //百位

    2. 法二:这一步也可以使用一个嵌套循环来解决

      for (int j = 1; j <= i; j *= 10)

      i / j % 10 //第一次循环求的是个位,第二次是十位,第三次是百位

  3. 然后就是求积和求和了

    1. 上一步用法一:

    a * b * c
    a + b + c

    1. 上一步用法二:
      mul *= i / j % 10
      add += i / j % 10
  4. 再和原数字比较,符合条件的就打印

    if (加 == 乘) 打印

  5. 综上所述

#include <stdio.h>

int main(void)
{
    int count = 0;                  //计数

    int i;
    for (i = 100; i < 1000; i++)    //遍历
    {
        //算值
        int a = i / 1 % 10;
        int b = i / 10 % 10;
        int c = i / 100 % 10;

        if (a * b * c == a + b + c) //比较
        {
            printf("%d\n", i);
            count++;
        }
    }
    printf("共计%d个\n", count);

    return 0;
}

也可以使用下面的方法(嵌套循环)

#include <stdio.h>

int main(void)
{
    int count = 0;                          //计数

    int i, j;
    for (i = 100; i < 1000; i++)            //遍历
    {
        int sum = 0;
        int mul = 1;
        for (j = 1; j <= i; j *= 10)        //算值
        {
            sum += i / j % 10;
            mul *= i / j % 10;
        }
        
        if (sum == mul)                     //判断
        {
            printf("%d\n", i);
            count++;
        }
    }
    printf("共计%d个\n", count);

    return 0;
}

推广:100~99999之间数字的每个位相加和相乘相等的数及这些数的总数

#include <stdio.h>

int main(void)
{
    int count = 0;

    int i, j;
    for (i = 100; i < 100000; i++)            //遍历
    {
        int sum = 0;
        int mul = 1;
        for (j = 1; j <= i; j *= 10)        //算值
        {
            sum += i / j % 10;
            mul *= i / j % 10;
        }
        
        if (sum == mul)         //判断
        {
            printf("%d\n", i);
            count++;
        }
    }
    printf("共计%d个\n", count);

    return 0;
}
posted @ 2023-03-19 09:51  codels  阅读(135)  评论(0)    收藏  举报