想了大半天也不知道是哪里出了问题,求大佬帮忙解答!

问题:从1到40数字中,含有2、0、1、9这四个数字的数的和是多少?

我的代码:

#include <stdio.h>

int main()
{
	int sum = 0, n, t; 
	for(int i = 1; i <= 40; i++)
	{
		t = i;
		n = 0;
		while(t != 0)
		{
			t %= 10;
			if(t == 2 || t == 0 || t == 1 || t == 9)
			{
				n++;
			}
			t /= 10;
		}
		if(n != 0)
		{
			sum += i;
		}
	} 
	return 0;	
} 

 

不知道是哪里出了问题,一直得不到正确答案,还请大佬帮忙看看!

问题出在12和17行,你在12行执行完之后,你的t已经是个位数了,无论怎么样,执行完17行你的t都是0,并没有达到你想要的t是十位数的效果。


int main()
{
	int sum = 0, n, m,t;
	for(int i = 1; i <= 40; i++)
	{
		t = i;

		n = 0;
		while(t != 0)
		{
			m =t% 10;
			if(m == 2 || m == 0 || m == 1 || m == 9)
			{
				sum+=i;
				break;
			}
			t =t/ 10;
		}
	}
	printf("%d",sum);
	return 0;
}

 

	int sum = 0, n, t; 
	for(int i = 1; i <= 40; i++)
	{
		t = i;
		//n = 0;
		while(t != 0)
		{
			t %= 10;
			if(t == 2 || t == 0 || t == 1 || t == 9)
			{
				//n++;
                sum+=i;
                break;
			}
			t /= 10;
		}
		//if(n != 0)
		//{
		//	sum += i;
		//}
	} 
	return sum;

 

你的代码很冗余,下面那个判断完全没必要,楼上代码就是正解

可以执行 有结果的啊