枚举和模拟
02 与7无关的数
描述
一个正整数,如果它能被7整除,或者它的十进制表示法中某个位数上的数字为7, 则称其为与7相关的数.现求所有小于等于n(n<100)的与7无关的正整数的平方和。
输入描述
案例可能有多组。对于每个测试案例输入为一行,正整数n,(n<100)
输出描述
对于每个测试案例输出一行,输出小于等于n的与7无关的正整数的平方和。
示例1
输入:
21
输出:
2336
解答
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
using namespace std;
/*
一个正整数
如果它能被7整除
或者它的十进制表示法中某个位数上的数字为7,
则称其为与7相关的数
现求所有小于等于n(n<100)的与7无关的正整数的平方和
*/
int Ifok(int k) {
//传入一个数字k 判断其是否符合要求
//想到前面逆序数法中 取得每一个位数的方法
//能被7整除
if (k % 7 == 0) {
return 0;
}
//某个位上的数字为7
int remain;//取数的最低位
while (k > 0) {
remain = k % 10;//得到个位数字
k = k / 10;//k向右移一位
if (remain == 7) {
return 0;
}
}
return 1;
}
int main() {
//思路
//首先肯定要获取用户的输入
//其次 想到写一个方法来判断是否符合要求
//写一个循环遍历所有数字 符合要求的加入总和便可
int n;
//因为有多组案例 所以使用while循环 可以接受多次输入
//!!!注意【多次输入】应当将要输入的内容写在while里面!!!
//并且要写输入内容!=EOF 否则提交到OJ平台会显示超时
while (scanf("%d", &n)!=EOF) {
int sum = 0;
for (int i = 1; i <= n; i++) {
if (Ifok(i) == 1) {
sum = sum + i * i;
}
}
printf("%d\n", sum);
}
return 0;
}