题目链接
https://vjudge.net/contest/394826#problem/F
题目大意
求与7无关数的平方和。
与7无关:不能被7整除,十进制各个位不含7。
解题思路
前缀和,太简单了。这不是我想讲的。
WA代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e6+10;
ll n,t;
ll ans[N];
bool is_7(int x){
if(x%7==0) return 1;
while(x){
if(x%10==7) return 1;
x/=10;
}
return 0;
}
int main(){
cin>>t;
for(int i=1;i<=1e6;i++){//唯一区别
ans[i]=ans[i-1];
if(!is_7(i)) ans[i]+=i*i;
}
while(t--){
cin>>n;
cout<<ans[n]<<endl;
}
}AC代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e6+10;
ll n,t;
ll ans[N];
bool is_7(int x){
if(x%7==0) return 1;
while(x){
if(x%10==7) return 1;
x/=10;
}
return 0;
}
int main(){
cin>>t;
for(ll i=1;i<=1e6;i++){//唯一区别
ans[i]=ans[i-1];
if(!is_7(i)) ans[i]+=i*i;
}
while(t--){
cin>>n;
cout<<ans[n]<<endl;
}
}总结
我想表达啥?要用longlong不能用int表示i,尽管i最大为1e6,但是ans要加的是ii,假如i=1e6,那么ii=1e12,超出int范围,发生溢出,底层数据被截断,导致结果出错!
我真的是忽略了这点,直到对比了好几遍代码,才发现了错因,引以为戒!

京公网安备 11010502036488号