输出与七有关的数
输入一个数N,输出不大于N的与七 有关的个数,如七的倍数,包含七数字的数如 20 里有三个数,7,14,17.
#include <stdio.h>
int main()
{
int i=0,n,j;
scanf("%d",&n);
for(j=7;j<=n;j++)
{
if(j/10==7 || j%10 == 7 || j%7 ==0)
i++;
}
printf("%d\n",i);
return 0;
}
我发现我的程序是有点问题的,并没有把所有的数都包含进去。如 170 这个数就不行。
独一无② 发表于 2015-11-29 15:01
if (j % 10 == 7)
(*p)++;
这个意思是,如果这个数的个位是7,就让i加1,这里的*p就是i。
void seven(int *p, int j)//判断一个数中是否有某一位是数字7
{
if (j % 10 == 7)//如果最后一位数字是7
(*p)++;//i加1
else if (j / 10 != 0)//如果最后一位数字不是7,就去掉最后一位数字,形成这个新的数,进入迭代计算
seven(p, j / 10);
}
这个函数执行的效果就是,从这个数的最后一位开始遍历,遇到是7的位,就让i加1,并且函数执行结束;如果一直没有是7的位,就执行到最后,i没有变化,函数执行结束。 这一句是有问题的“if(j/10==7 || j%10 == 7 || j%7 ==0)”。也不是有问题就是逻辑上不对,170不满足所有的条件所以就没有咯。
只要把j/10改成j%10==0就可以了,记得采纳哦 老师 发表于 2015-11-29 13:39
这一句是有问题的“if(j/10==7 || j%10 == 7 || j%7 ==0)”。也不是有问题就是逻辑上不对,170不满足所有的 ...
j%10==0 那不是 180,190也符合了,但是事实上不行。 if判断的逻辑有漏洞,判断小于170的数是不会发现问题的,大于等于170之后就不准确了。
这是我改的代码:
#include<stdio.h>
void seven(int *p, int j)
{
if (j % 10 == 7)
(*p)++;
else if (j / 10 != 0)
seven(p, j / 10);
}
int main()
{
int i = 0, j, n;
int *p = &i;
scanf("%d", &n);
for (j = 7; j <= n; j++)
{
if (j % 7 == 0)
i++;
else
seven(p, j);
}
printf("%d\n", i);
return 0;
} 0xcc 发表于 2015-11-29 14:40
if判断的逻辑有漏洞,判断小于170的数是不会发现问题的,大于等于170之后就不准确了。
这是我改的代码:
...
if (j % 10 == 7)
(*p)++;
这一步是什么意思? 看不懂 本帖最后由 ravenhu13 于 2015-11-29 15:30 编辑
#include <stdio.h>
int main()
{
int i=0,n,j;
int k;
scanf("%d",&n);
for(j=7;j<=n;j++)
{
//7的倍数打印出来
if ((j/7)&&(j%7==0))
{
printf("%d\n",j);
}else
{
//包含7的数字
k = j;
for (i=10;k/i>0;i*=10)
{
if (((k/i)%i)==7)
{
printf("%d\n",k);
}
}
}
}
return 0;
} 这里我是输出所有有关7的数字,个数的你改改就可以了。 0xcc 发表于 2015-11-29 15:28
这个意思是,如果这个数的个位是7,就让i加1,这里的*p就是i。
void seven(int *p, int j)//判断一个数 ...
哦哦,现在懂了。谢谢了 还没懂
页:
[1]