搜索
查看: 2578|回复: 5
打印 上一主题 下一主题

求助~~ 程序运行到一半卡住,高手看看是哪里有问题呢~

[复制链接]
跳转到指定楼层
楼主
发表于 2012-7-24 10:03:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
/*代码如下:*/
#include <stdio.h>
int hw(int m)
{
        int y,s=0;
    y=m;
    while(y)
    {
                s=s*10+y%10;
        y=y/10;
    }
    if(s==m)
                return 1;
        else
                return 0;
}
int main()
{
        int a,b,c,d=1,n=0;
    for(a=2;a<1000000;a++)
    {
                c=a/2;
                for(b=2;b<=c;b++)
                        if(a%b==0)
                                {d=0;break;}
        if(d)
        {
                        if(hw(a))
            {
                                printf("%d        ",a);
                            n++;
            }
        }
        d=1;
    }
   printf("\n%d\nEnd",n);  /*这一句总是输出不出来。如果将1000000改小的话,程序一切正常。*/
        sleep(5000);
        return 0;
}
/*是为了求出1~1000000中有多少个回文质数。*/

最佳答案

查看完整内容

一个是除一个是开方,能一样?百万内除法没问题的……真正原因是1000000*500000循环缓冲区溢出,开方减少了几个数量级
来自 2#
 楼主| 发表于 2012-7-24 17:46:23 | 只看该作者
我自己发现不对的地方了。
c=a/2;在数字大了之后就无法运算了,只有把它改成c=sqrt(a);才可以运算成功。
而且要在之前引入头文件math.h。
即在最前面写入代码:#include <math.h>
板凳
发表于 2012-7-24 10:03:06 来自手机 | 只看该作者
z275813760 发表于 2012-7-24 17:46  我自己发现不对的地方了。  c=a/2;在数字大了之后就无法运算了,只有把它改成c=sqrt(a);才可以运算成功。  ...

一个是除一个是开方,能一样?百万内除法没问题的……真正原因是1000000*500000循环缓冲区溢出,开方减少了几个数量级
地板
发表于 2012-7-24 16:01:31 | 只看该作者
把int改为长整型long int 试一下
5#
发表于 2012-7-25 16:53:05 | 只看该作者
致命错误:循环变量应是整形
6#
发表于 2013-7-24 10:54:07 | 只看该作者
%b加个l函数完美运行
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表