首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

除了次方数(C语言版)

2013-06-26 
除去次方数(C语言版)/*除去次方数* 自然数的平方数是:1 4 9 16 25 … 自然数的立方数是:1 8 27 64 125 … 自

除去次方数(C语言版)
/*     除去次方数 
 * 自然数的平方数是:1 4 9 16 25 … 
自然数的立方数是:1 8 27 64 125 … 
自然数的4次方数是:1 16 81 256 … 
… 
这些数字都可以称为次方数。 
1~10000中,去掉所有的次方数,还剩下多少个数字? 
 
 */  
//以下是我的代码

#include <stdio.h>
#include <math.h>
void main() {
int count=0;
int x,y;
for(y=2;y<=13;y++) {  //因为2^13<10000,而2^14>10000
for(x=2;x<=100;x++){   //100的平方是10000
if(pow(x,y)<=10000)
count++;
}
}
printf("%d\n",10000-count+1);
}


运行的结果是:9856,正确的结果是9875.
在java中,同样的思路却可以运行出正确的结果。不知我这代码错在哪,望各位指出,谢谢。
[解决办法]
2^4=4^2,你扣了两遍
我很好奇你的java代码怎么对的。
[解决办法]
你如果不想考虑那么多,可以定义一个数组,遇到了那个数就吧数组置为0,然后统计非零的个数,就可以了。
[解决办法]

int count_non_pow_number(int N)
{
    if(N < 1) return -1;
    if(N == 1) return 0;
    std::vector<int> v;
    v.assign(N,0);
    int sum=0;
    for(int i=2; i<N; ++i)
    {
        if(v[i-1]==1) continue;
        ++sum;
        int p=i*i;
        while(p<=N)
        {
            v[p-1]=1;
            p *= i;
        }
    }
    return sum;
}

热点排行