首页 > 其他分享 >打印100~999之间三位数每一位的积等于每一位的和的数字以及这些数的总数

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

时间:2023-03-19 10:15:18浏览次数:45  
标签:count 10 int 999 ++ 三位数 123 100

打印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;
}

标签:count,10,int,999,++,三位数,123,100
From: https://www.cnblogs.com/codels/p/17232509.html

相关文章

  • 100道python基础题——(8)
    问题:编写一个程序,接受逗号分隔的单词序列作为输入,按字母顺序排序后按逗号分隔的序列打印单词。假设向程序提供以下输入:without,hello,bag,world则输出为:bag,hello,witho......
  • 100道python基础题——(9)
    多组输入问题:编写一个程序,接受一行序列作为输入,并在将句子中的所有字符大写后打印行。假设向程序提供以下输入:HelloworldPracticemakesperfect则输出为:HELLOWORLDP......
  • 100道python基础题——(7)
    问题:编写一个程序,以2位数字,X,Y作为输入,生成一个二维数组。数组的第i行和第j列中的元素值应该是i*j。注意:i=0,1..,X-1;j=0,1,­Y-1。例子假设程序有以下输入:......
  • 100道python基础题——(6)
    编写一个程序,根据给定的公式计算并打印值:。以下是C和H的固定值:C是50。H是30。D是一个变量,它的值应该以逗号分隔的序列输入到程序中。例子假设程序的输入序列是逗号分隔的......
  • 100道python基础题——(5)
    Python简明教程---20,Python类中的属性与方法-码农充电站-博客园(cnblogs.com)问题:定义一个至少有两个方法的类:    getString:从控制台输入获取字符串......
  • 0008 ALGO999-数的潜能
    试题算法训练数的潜能可以转换为将数分解为多少个3,再处理余数即可。为什么不分解为2,因为23=8<9=32。加上较小值得处理,输入值\(\le4\)时,直接输出即可。......
  • 图片分割100块点击消除,再次点击出现
    第一步:创建一个web项目,本地导入vue.js  第二步:实例化vue对象    第三步:利用photoshop将图片分割成10*10,导入img文件夹下,并在vue的data属性下创建一个图片路......
  • 100Wqps异地多活,得物是怎么架构的?
    文章持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+......
  • LeetCode 1005.K 次取反后最大化的数组和
    题目描述:给你一个整数数组nums和一个整数k,按以下方法修改该数组:选择某个下标i并将nums[i]替换为-nums[i]。重复这个过程恰好k次。可以多次选择同一个下......
  • 100道python基础题——(3)
    dict()用法问题:使用给定的整数n,编写一个程序生成一个包含(i,i*i)的字典,该字典包含1到n之间的整数(两者都包含)。然后程序应该打印字典。假设向程序提供以下输入:8则输出为......