我想制作一个遵循这条规则的程序:
如果用户输入'n',您需要找到从1到n的所有幸运数字。幸运数字是指数字为4或7或两者的数字。
我做了这个,但无法管理如何对大于10的数字进行操作。
#include<iostream>
using namespace std;
int main()
{
int digits, n, count=0;
cout << "Enter upper limit: ";
cin >> n;
for (int i=0; i<n; i++){
if((i==4) || (i==7)){
count++;
}
}
cout << "Number of lucky numbers in given range is " << count;
return 0;
}
答案 0 :(得分:8)
将整数格式化为字符串。然后,测试字符串中的所需字符。
奖励方法(仅限整数):您可以使用对数,除法,模数,减法等来迭代并测试每个数字。
答案 1 :(得分:1)
@Steven方法非常好,但您也可以将输入替换为char数组而不是int并使用cin::getline
函数。
int main()
{
int n;
int count = 0;
cout << "Enter upper limit: ";
cin >> n;
for (int i = 1; i <= n; i++)
{
char szBuffer[100];
sprintf_s(szBuffer, "%d", i);
if ( strstr(szBuffer,"4") != NULL || strstr(szBuffer,"7") != NULL )
{
count++;
}
}
cout << "Number of lucky numbers in given range is " << count;
return 0;
}
答案 2 :(得分:0)
我现在正在做这个练习。我接受了你的初步建议并对其进行了扩展以获得以下内容(插入代替你的for循环):
for (int i=0; i<=n; i++){
int j = i;
while(j > 1) {
if((j % 10 == 4 || j % 10 == 7)) {
count++;
break;
}
j = j / 10;
}
}
这似乎得到了预期的答案。然而,当试图检查解决方案时,该网站声称结果是错误的n = 74(它声称正确的答案是15,但手工计数我很确定它是27,这是这个代码还返回什么)。我没弄清楚我做错了什么,所以我试图在网站上记录一张票。