幸运数字——sprintf的运用

幸运数字——sprintf的运用

题目描述

小明认为,如果以下条件之一成立,正整数 x 就是一个幸运数字:

  1. x是4的倍数;

  2. x是7的倍数;

  3. x 转换为字符串后包含子串“44”或“77”。

例如,105 (7 的倍数), 442 (包含“44”), 1284 (4 的倍数)都是幸运数字,474 则不是。 编程统计 1 到 n 中幸运数字的数量。

输入

整数 n (1 ≤ n ≤ 1,000,000)

输出

一个整数:1, 2, …, n中幸运数字的数量

样例输入

32

样例输出

11

题解/思路

题意第一点和第二点都很好理解,难点主要在第三点——数字与字符串的转换比较(sprintf的了解和使用)

转载一篇我觉得还不错的博客,大家不懂的可以去看看:https://blog.csdn.net/xdrt81y/article/details/12087769

代码

#include <bits/stdc++.h>

using namespace std;

char str[10]={'0'};//定义一个数组
int main()
{
    int n,i,sum=0,j;
    cin>>n;
    for(i=1;i<=n;i++)
    {
        sprintf(str,"%d",i);//将n个数都输出到目标数组str中
        if(i%4==0)//进行条件1的判断
        {
            sum+=1;
            continue;
        }
        else if(i%7==0)//进行条件2的判断
        {
            sum+=1;
            continue;
        }
        else
        {
           for(j=0;j<strlen(str);j++)//对字符串中所有元素进行遍历
           {
               if(str[j]=='4'&&str[j+1]=='4')//重难点:数字和字符串的转化
               {
                   sum+=1;
                   break;
               }
               if(str[j]=='7'&&str[j+1]=='7')//重难点:数字和字符串的转化
               {
                   sum+=1;
                   break;
               }
           }
        }
    }
    cout<<sum<<endl;
    return 0;
}

posted @ 2020-11-19 18:36  许君  阅读(331)  评论(0编辑  收藏  举报