求1到n所有带0,2,1,9的数字之和,无论输入什么,结果都是1,为什么??

#include<stdio.h>
int main()
{
	int n,i,count=0;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		if(i>=1&&i<10)
		{
			if(i%10==0||i%10==2||i%10==1||i%10==9)
			count+=i;
		}
	else if(i>=10&&i<100)
		{
			if(i%10==2||i/10==2||i%10==0||i%10==1||i/10==1||i%10==9||i/10==9)
		  	count+=i;
		}
	else if(i>=100&&i<1000)
		{
			if(i%10==2||i/10%10==2||i/100==2||i%10==0||i%10/10==0||i%10==1||i/10%10==1||i/100==1||i%10==9||i/10%10==9||i/100==9)
			count+=i;
		}
	else if(i>=1000&&i<10000)
		{
			if(i%10==2||i/10%2==2||i/100%10==2||i/1000||i%10==0||i/10%10==0||i/100%10==0||i%10==1||i/10%10==1||i/100%10==1||i/1000==1||i%10==9||i/10%10==9||i/100%10==9||i/1000==9)
			count+=i;
		}
		printf("%d",count);
		return 0; 
	}
}

 

假如你只是输入最终结果的话,你那个输出printf(....) 应该放在循环外面执行,

因为你把

printf("%d",count);
return 0;

写到了for循环里面,导致for循环只执行一次。

你把它放在for外面就OK了

#include<stdio.h>
int main()
{
    int n,i,count=0;
    scanf("%d",&n);
        if(i>=1&&i<10)
        {   for(i=1;i<=n;i++)
            if(i%10==2||i%10==1||i%10==9)
            count+=i;
        }
    else if(i>=10&&i<100)
        {   for(i=1;i<=n;++i)
            if(i%10==2||i/10==2||i%10==0||i%10==1||i/10==1||i%10==9||i/10==9)
              count+=i;
        }
    else if(i>=100&&i<1000)
        {   for(i=1;i<=n;i++)
            if(i%10==2||i/10%10==2||i/100==2||i%10==0||i%10/10==0||i%10==1||i/10%10==1||i/100==1||i%10==9||i/10%10==9||i/100==9)
            count+=i;
        }
    else if(i>=1000&&i<10000)
        {    for(i=1;i<=n;++i)
            if(i%10==2||i/10%2==2||i/100%10==2||i/1000||i%10==0||i/10%10==0||i/100%10==0||i%10==1||i/10%10==1||i/100%10==1||i/1000==1||i%10==9||i/10%10==9||i/100%10==9||i/1000==9)
            count+=i;
        }
        printf("%d",count);
        return 0;
    }

 

#include<stdio.h>
int main()
{
    int n,i,count=0;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        if(i>=1&&i<10)
        {
            if(i%10==0||i%10==2||i%10==1||i%10==9)
            count+=i;
        }
    else if(i>=10&&i<100)
        {
            if(i%10==2||i/10==2||i%10==0||i%10==1||i/10==1||i%10==9||i/10==9)
              count+=i;
        }
    else if(i>=100&&i<1000)
        {
            if(i%10==2||i/10%10==2||i/100==2||i%10==0||i%10/10==0||i%10==1||i/10%10==1||i/100==1||i%10==9||i/10%10==9||i/100==9)
            count+=i;
        }
    else if(i>=1000&&i<10000)
        {
            if(i%10==2||i/10%2==2||i/100%10==2||i/1000||i%10==0||i/10%10==0||i/100%10==0||i%10==1||i/10%10==1||i/100%10==1||i/1000==1||i%10==9||i/10%10==9||i/100%10==9||i/1000==9)
            count+=i;
        }
    }
    printf("%d",count);
    return 0;
}

你的程序也可以这么写

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y