与 7 无关的数
题目描述
一个正整数,如果它能被 7 7 7 整除,或者它的十进制表示法中某一位上的数字为 7 7 7,则称其为与 7 7 7 相关的数。现求所有小于等于 n ( n < 100 ) n(n<100) n(n<100) 与 7 7 7 无关的正整数的平方和。
输入格式
输入为一行,正整数 n ( n < 100 ) n(n<100) n(n<100)。
输出格式
输出一行,包含一个整数,即小于等于 n n n 的所有与 7 7 7 无关的正整数的平方和。
样例 #1
样例输入 #1
21
样例输出 #1
2336
题目解析
首先,我们需要定义一个check的函数,来判断是否与7无关
check函数要做两件事情:
1.是否能被7整除?
2.数字中是否含有7?
所以,check函数应该是这样的
bool check(int x){
string s = to_string(x);
bool fg = true;
for(int i = 0; i < s.length(); i++) {
if(s[i] == '7') {
fg = false;
break;
}
}
if(x % 7 == 0) {
fg = false;
}
return fg;
}
那么main函数就好说了,直接上AC代码!
AC CODE
#include <bits/stdc++.h>
using namespace std;
int n;
int ans;
bool check(int x){
string s = to_string(x);
bool fg = true;
for(int i = 0; i < s.length(); i++) {
if(s[i] == '7') {
fg = false;
break;
}
}
if(x % 7 == 0) {
fg = false;
}
return fg;
}
int main(){
cin >> n;
for(int i = 0; i <= n; i++) {
if(check(i)) {
ans += i * i;
}
}
cout << ans << endl;
return 0;
}
//https://www.luogu.com.cn/problem/B2081
彩蛋
注意呀,血的教训呀
我这段代码哪里错了
#include<bits/stdc++.h>
using namespace std;
int n;
int ans;
bool check(int x){
char s[100];
itoa(x,s,10);
bool fg=1;
for(int i=0;i<strlen(s);i++) if(s[i]-'0'==7) {
fg=0;
break;
}
if(x%7==0) fg=0;
return fg;
}
int main(){
scanf("%d",&n);
for(int i=0;i<=n;i++) if(check(i)) ans+=i*i;
cout<<ans<<endl;
return 0;
}
//https://www.luogu.com.cn/problem/B2081
原来!!!!
这段代码存在几个问题。首先,头文件应该是 #include <bits/stdc++.h>,而不是 #include<bits/stdc++.h> 。其次,itoa函数在C++中不是标准库函数。你可以使用to_string或stringstream来将整数转换为字符串。另外,scanf和printf通常在竞赛编程中不够安全,可以使用cin和cout替代。最后,check函数的逻辑需要调整,以正确识别数字中是否包含7以及是否能被7整除。
所有要考CSP IOI ICPC的人们,注意这些函数的用法!祝你们AKAKAK~~
本题来自:luogu-b2081