打印100~999之间三位数每一位(个十百)的积等于每一位(个十百)的和的数字以及这些数的总数
-
首先需要一个循环,遍历所有的三位数,即100~999
for (int i = 100; i < 1000; i++)
-
然后需要取它们的个位、十位和百位
假设三位数123 123 / 1 == 123 123 / 1 % 10 == 3 123 / 10 == 12 123 / 10 % 10 == 2 123 / 100 == 1 123 / 100 % 10 == 1
-
法一: 分别求出个位、十位和百位
a = i / 1 % 10 //个位
b = i / 10 % 10 //十位
c = i / 100 % 10 //百位
-
法二:这一步也可以使用一个嵌套循环来解决
for (int j = 1; j <= i; j *= 10)
i / j % 10 //第一次循环求的是个位,第二次是十位,第三次是百位
-
-
然后就是求积和求和了
- 上一步用法一:
a * b * c
a + b + c
- 上一步用法二:
mul *= i / j % 10
add += i / j % 10
-
再和原数字比较,符合条件的就打印
if (加 == 乘) 打印
-
综上所述
#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