数位寻数

101 阅读2分钟

数位寻数.png

代码如下

#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.注意各变量初始化。