百练的poj第4045题:与3和5无关的数,机器上运行可以通过,为什么还是Wrong Answer
题目地址 http://poj.grids.cn/practice/4045/
描述
一个正整数,如果它能被x整除,或者它的十进制表示法中某个位数上的数字为x,则称其为与x相关的数.现求所有小于等于n(n<300)的与x无关的正整数的平方和.
输入
输入为一行,正整数n,(n<300)
输出
输出小于等于n的与3和5无关的正整数的平方和
样例输入
8
样例输出
134
代码如下:
#include <stdio.h>
#include <stdlib.h>
#define N1 3
#define N2 5
int main()
{
int n,i,j,sum,temp,flag = 0;
//printf("Input one integer:");
scanf("%d",&n);
if(n >= 300){ //n<300
printf("n is too big!\n");
return 0;
}
sum = 0;//result
for(i = 1;i <= n;i++){
flag = 0;
if((i % N1 == 0) || (i % N2 == 0))//整数倍
flag = 1;
else for(temp = i / 10;temp !=0; temp = temp /10){
j = 1 % 10;//j表示余数
if((j == N1)||(j == N2))
flag = 1;
}
if(flag == 0){
//printf("i = %d\t",i);
sum += i * i;
//printf("sum = %d\t",sum);
}
}
printf("%d\n",sum);
return 0;
}
以上可以在codeblock上运行通过,试过两个小例子7,8,结果正确;欢迎各种挑错与指点
[解决办法]
擦 这么简单
#include <stdio.h>
#include <stdlib.h>
#define N1 3
#define N2 5
int main()
{
int n,i,j,sum,temp,flag = 0;
//printf("Input one integer:");
scanf("%d",&n);
if(n >= 300){ //n<300
printf("n is too big!\n");
return 0;
}
sum = 0;//result
for(i = 1;i <= n;i++){
flag = 0;
if((i % N1 == 0) || (i % N2 == 0))//整数倍
flag = 1;
else for(temp = i;temp !=0; temp = temp /10){
j = temp % 10;//j表示余数
if((j == N1)||(j == N2))
flag = 1;
}
if(flag == 0){
//printf("i = %d\t",i);
sum += i * i;
//printf("sum = %d\t",sum);
}
}
printf("%d\n",sum);
return 0;
}