C语言 统计数字(count) 编程 求找出程序的错误

统计数字(count)
【问题描述】
请你编一个程序,求出在[a,b]中(包含所有不小于a且不大于b的整数)有多少个数能同时满足下面两个条件:
1. 此数至少有一位数字是c。 2. 此树是c的倍数。
【输入格式】
输入的第一行包含三个整数,分别表示a、b、c。
【输出格式】
一个整数,即指定范围内所有满足要求的整数个数。
【样例输入】
27 50 2
【样例输出】
3
【数据规模】
0<a<b<100000 0<c<10

一开始用字符串的方法做出来了,但是想想好像字符串不太好,就想用数的方法做出来,请帮我找一下程序出错在哪里了。
(1)测试数据答案不对 (2)某些数据会进入死循环
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
int main()
{
int i,j,a,b,c,book[1001],sum=0;
scanf("%d%d%d",&a,&b,&c);
for (i=a;i<=b;i++)
{
if ((i<10)&&(i=c)) book[i]=1;
j=i;
while (j>=10)
{
if (j%10==c) book[i]=1;
j=j/10;
}
if ((j<10)&&(j=c)) book[i]=1;
}
for (i=a;i<=b;i++)
if ((i%c==0)&&(book[i]==1)) sum++;
printf("%d",sum);

}

你的代码基本思路是对的,不过有几个问题:

    book的下标和i值对应,当a、b取值很大时,i值就可能超出book下标范围了,会造成越界访问;

    寻找数里有没有c,直接把这个数不停地对10取余然后降位,直到这个数变成0为止,不需要针对个位单独判断;

    在匹配到数字c的时候,直接再判断i是否能被c整除就可以了,不用book记录了,可以去掉book。

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
int main()
{
    int i,j,a,b,c,sum=0;
    scanf("%d%d%d",&a,&b,&c);
    for (i=a; i<=b; i++)
    {
        j=i;
        while (j)
        {
            if (j%10==c)
            {
                if(i%c==0)
                    sum++;
                break;
            }
            j=j/10;
        }
    }
    printf("%d",sum);
}

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网