代码如下
#include<stdio.h>
int main()
{
int i=1,n=0;
int sum1, sum2,sum3,sum4, Sum;
sum1 = sum2 = sum3 =sum4= Sum=0;
printf("请输入一个数");
scanf_s("%d",&n);
if (n>=1&&n<10)//n<10
{
for (i=1; i <=n; i++)
{
if (i == 2 || i == 0 || i == 1 || i == 9)
{
printf("%d\n", i);
Sum += i;
}
}
printf("和为:%d", Sum);
}
if (n >= 10 && n < 100)//n<100
{
for (i=1; i <10; i++)//1-10符合的数
{
if (i == 2 || i == 0 || i == 1 || i == 9)
{
printf("%d\n", i);
sum1 += i;
}
}
for (i = 10; i <= n; i++)
{
if (i%10== 2 || i%10 == 0 || i % 10 == 1 || i % 10 == 9|| i / 10 == 2 || i / 10 == 0 || i / 10 == 1 || i / 10 == 9)
{
printf("%d\n", i);
sum2 += i;
}
}
Sum = sum1 + sum2;
printf("和为: %d", Sum);
}
if (n >= 100 && n < 1000)//n<1000
{
for (i = 1; i <= 10; i++)
{
if (i == 2 || i == 0 || i == 1 || i == 9)
{
printf("%d\n", i);
sum1 += i;
}
}
for (i = 10; i <= 100; i++)
{
if (i % 10 == 2 || i % 10 == 0 || i % 10 == 1 || i % 10 == 9|| i / 10 == 2 || i / 10 == 0 || i / 10 == 1 || i / 10 == 9)
{
printf("%d\n", i);
sum2 += i;
}
}
for (i = 100; i <= n; i++)
{
if (i / 100 == 2 || i / 100 == 0 || i / 100 == 1 || i / 100 == 9|| i / 100 / 10 == 2 || i / 100 / 10 == 0 || i / 100 / 10 == 1 || i / 100 / 10 == 9|| i / 100 % 10 == 2 || i / 100 % 10 == 0 || i / 100 % 10 == 1 || i / 100 % 10 == 9)
{
printf("%d\n", i);
sum3 += i;
}
}
Sum = sum1 + sum2 + sum3;
printf("和为:%d", Sum);
}
if (n >= 1000 && n < 10000)//n<10000
{
for (i = 1; i <10; i++)
{
if (i == 2 || i == 0 || i == 1 || i == 9)
{
printf("%d\n", i);
sum1 += i;
}
}
for (i = 10; i <100; i++)
{
if (i % 10 == 2 || i % 10 == 0 || i % 10 == 1 || i % 10 == 9 || i / 10 == 2 || i / 10 == 0 || i / 10 == 1 || i / 10 == 9)
{
printf("%d\n", i);
sum2 += i;
}
}
for (i = 100; i < 1000; i++)
{
if (i / 100 == 2 || i / 100 == 0 || i / 100 == 1 || i / 100 == 9 || i / 100 / 10 == 2 || i / 100 / 10 == 0 || i / 100 / 10 == 1 || i / 100 / 10 == 9 || i / 100 % 10 == 2 || i / 100 % 10 == 0 || i / 100 % 10 == 1 || i / 100 % 10 == 9)
{
printf("%d\n", i);
sum3 += i;
}
}
for (i = 1000; i <= 10000; i++)
{
if (i == 10000|| i / 100 % 10 == 2 || i / 100 % 10 == 0 || i / 100 % 10 == 1 || i / 100 % 10 == 9|| i / 100 / 10 == 2 || i / 100 / 10 == 0 || i / 100 / 10 == 1 || i / 100 / 10 == 9|| i / 1000 % 10 == 2 || i / 1000 % 10 == 0 || i / 1000 % 10 == 1 || i / 1000 % 10 == 9|| i / 1000 == 2 || i / 1000 == 0 || i / 1000 == 1 || i / 1000 == 9)
printf("%d\n", i);
sum4 += i;
}
Sum = sum1 + sum2 + sum3 + sum4;
printf("和为:%d", Sum);
}
return 0;
}
问题解析:
1.||代表的是或,选择关系,&&代表的是和,并列关系。
2.一开始将每一位都用if去表达解释,造成结果重复化,可以将所需要的条件都跟在if后面,一次性进行筛选测试。
3.定义范围时,出现重复定义的问题,并且一开始用pow来做表达的大小值,造成程序出错且不报错,往后编程需注意。
4.编程时比较关系不可这样表达: 1<n<10;这为错误表达方式,应为1<n&&n<10
5.和这一表达式的放置位置应注意逻辑关系。
6.注意各变量初始化。