与7无关的数

总时间限制: 
1000ms
 
内存限制: 
65536kB
描述

一个正整数,如果它能被7整除,或者它的十进制表示法中某一位上的数字为7,则称其为与7相关的数.现求所有小于等于n(n < 100)的与7无关的正整数的平方和.

输入
输入为一行,正整数n(n < 100)
输出
输出一行,包含一个整数,即小于等于n的所有与7无关的正整数的平方和。
样例输入
21
样例输出
2336
来源
计算概论05

代碼實現:

 1 #include<cstdio>
 2 int n,ans;
 3 int main(){
 4     scanf("%d",&n);
 5     for(int i=1;i<=n;i++){
 6         if(i%7==0) continue;
 7         if(i%10==7) continue;
 8         if(i/10==7) continue;
 9         ans+=i*i;
10     }
11     printf("%d\n",ans);
12     return 0;
13 }

题目来源:OpenJudge-NOI

 

一个正整数,如果它能被7整除,或者它的十进制表示法中某个位数上的数字为7,则称其为与7相关的数。求所有小于等于N的与7无关的正整数的平方和。
 
例如:N = 8,<= 8与7无关的数包括:1 2 3 4 5 6 8,平方和为:155。
Input
第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 1000)
第2 - T + 1行:每行1个数N。(1 <= N <= 10^6)
Output
共T行,每行一个数,对应T个测试的计算结果。
Input示例
5
4
5
6
7
8
Output示例
30
55
91
91
155
李陶冶 (题目提供者)
 
C++的运行时限为:1000 ms ,空间限制为:131072 KB
先打表。
代码实现:
 1 #include<cstdio>
 2 #include<iostream>
 3 using namespace std;
 4 const long long maxn=1000010;
 5 long long t,n,a;
 6 long long ans[maxn];
 7 bool p;
 8 int main(){
 9     for(long long i=1;i<=maxn;i++){
10         a=i;p=0;ans[i]=ans[i-1];
11         if(a%7==0) p=1;
12         while(a){
13             if(p) break;
14             if(a%10==7) p=1;
15             a/=10;
16         }
17         if(!p) ans[i]+=i*i;
18     }
19     cin>>t;
20     for(long long i=1;i<=t;i++){
21         cin>>n;
22         cout<<ans[n]<<endl;
23     }
24     return 0;
25 }

题目来源:51Nod

posted @ 2016-12-10 16:48  J_william  阅读(2254)  评论(0编辑  收藏  举报