输入一个数n(n>0),求从1~n中与7无关的正整数的平方和。
提示:所谓与7有关的正整数就是该数的某一位上的数为7或者该数能被7整除
代码思路:利用拆数算法,判断某个数的每一位是不是不为7,然后再判断该数能不能被7整除。
我们先来回顾一下拆数算法是怎么拆的:
#include<stdio.h>
int main(){
int n;
scanf("%d",&n);
/*
n=n/10是为了去除上一次循环已经输出
过的个位,下一层循环又是新的个位
*/
for(;n>0;n=n/10){
//n%10就是取到了该数的个位
printf("%d ",n%10);
}
return 0;
}
这个算法我们可以应用到本题中来判断某个正整数中是否某位上是7
那么现在我们可以把算法的大致思路理清楚了。
外层遍历循环(从1~n),内层拆数算法判断是否有7+判断是否被7整除,然后如果这个数二者都不满足,那就进行平方和操作
现在上代码
#include<stdio.h>
int main(){
//isseven是判断这个数是否含有7
int n,i,sum=0,isseven=0,j;
scanf("%d",&n);
for(i=n;i>0;i--){
//判断该数是否与7有关:被7整除或者位数上有7
for(j=i;j>0;j=j/10){
if(j%10==7){
//记录含有7
isseven=1;
//跳出循环
break;
}
}
//双重判断,如果二者不满足就执行平方和操作
if(i%7!=0&&isseven!=1){
sum+=i*i;
}
isseven=0;
}
//输出结果
printf("%d",sum);
return 0;
}