幸运数字——sprintf的运用
幸运数字——sprintf的运用
题目描述
小明认为,如果以下条件之一成立,正整数 x 就是一个幸运数字:
-
x是4的倍数;
-
x是7的倍数;
-
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;
}