求对于给定的正整数n(1<=n<=999999),输出n以内能被13整除,且至少包含2个7的整数的个数。(用c++)

.例如n=500时,至少包含2个7的整数有77、177、277、377、477,而能被13整数的数只有377,即只有1个。

可以利用循环:

#include<stdio.h>
void main()
{
     long n,m;
     int i=0,count=0;
     scanf("%ld",&n);
     for(i=13;i<n;i+=13)
     {
        count=0;
        m=i;
        while(m>9)
        {
            if(m%10==7)
                count++;
            m/=10;
        }
        if(count>1)
             printf("%d\t",i);
     }
}

也可以使用函数:

#include<stdio.h>
int num(long a)
{
    int count=0;
    while(a>9)
    {
        if(a%10==7)
            count++;
        a/=10;
    }
    return count;
}
void main()
{
     long n;
     int i=0;
     scanf("%ld",&n);
     for(i=13;i<n;i+=13)
     {
         if(num(i)>1)
             printf("%d\t",i);
     }
}

大型程序的开发往往划分成许多快来实现,所以我们习惯使用也鼓励使用函数来实现程序的功能,这样程序的可移植性会大大增强!

追问

谢谢。

追答

什么情况?

追问

功力不够,有些看不懂。。。

追答

晕,不懂说就是了……

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-14
#include <stdio.h>

int main()
{
int n, m, c;
for(n=1;n<=999999;n++)
{
if(n%13!=0)
continue;
m=n;
c=0;
while(m!=0)
{
if(m%10 == 7)
c++;
m=m/10;
}
if(c>=2)
printf("%d\n", n);
}
return 0;
}
第2个回答  2013-05-14
#include<iostream>
#include <string>
using namespace std;
int main( )
{
int i,n,j,k;
char s[8];
cout << "input n"<< endl;
cin >> n;
for (i=1;i<n;i++){
if ((i % 13) == 0){
sprintf(s,"%d",i); k=0;
for (j=0;j<strlen(s);j++) {if (s[j]=='7') k++;};
if (k >= 2) cout << i << endl;
}
}
return 0;
}

用 sprintf(s,"%d",i); 转化为字符串,查里面有几个'7'.
第3个回答  2013-05-14
这个很容易啊,等下给你追问

花都谢了呢!