回 帖 发 新 帖 刷新版面

主题:帮忙看看问题

关于自守数的问题。
如果一个数的平方的尾数还是这个数,那么这个数就是自守数。
例如25的平方为625,位数为25,那么25就是自守数。
#include <iostream>
#include <cmath>
using namespace std;
class CSelf
{
    int m,n,p;
    int a[100];
public:
    CSelf()
    {
        m=10;n=100;
    }
    CSelf(int a,int b)
    {
        m=a;n=b;
    }
    void process()
    {
        int j(0);
        for(int i=m;i<=n;i++)
        {
            int k;
            if(i>10000) k=10000;
            else if(i>1000) k=1000;
            else if(i>100) k=100;
            else if(i>10)  k=10;
            else if(i>0)   k=1;
            if((i*i)%k==i)
            {
                a[j]=i;
                j++;
                p++;
            }
        }
    }
    void print()
    {
        cout<<"总共有"<<p<<"个自守数."<<endl;
        if(p>0)
        {
            cout<<"分别为:"<<endl;
            for(int i=0;i<p;i++)
                cout<<a[i]<<endl;
        }
    }
};
void main()
{
    CSelf a,b(1,10000);
    a.process();
    a.print();
    b.process();
    b.print();
}
我写的程序有问题,是CSelf中的p的问题,不知道该怎么改。



回复列表 (共3个回复)

沙发

#include <iostream>
#include <cmath>
using namespace std;
class CSelf
{
    int m,n,p;
    int a[100];
public:
    CSelf()
    {
        m=10;n=100;p = 0;
    }
    CSelf(int a,int b)
    {
        m=a;n=b;p = 0;
    }
    void process()
    {
        int j(0);
        for(int i=m;i<=n;i++)
        {
            int k;
            if(i>10000) k=100000; //漏了一个0
            else if(i>1000) k=10000;//漏了一个0
            else if(i>100) k=1000;//漏了一个0
            else if(i>10)  k=100;//漏了一个0
            else if(i>0)   k=10;//漏了一个0
            if((i*i)%k==i)
            {
                a[j]=i;
                j++;
                p++;
            }
        }
    }

    void print()
    {
        cout<<"总共有"<<p<<"个自守数."<<endl;
        if(p>0)
        {
            cout<<"分别为:"<<endl;
            for(int i=0;i<p;i++)
                cout<<a[i]<<endl;
        }
    }
};
void main()
{
    CSelf a,b(1,10000);
    a.process();
    a.print();
    b.process();
    b.print();

    system("pause");
}

板凳

k的取值有问题,比如a(10,100),k=10,25*25%10==5 !=25

提供一种思路
for (int src = 0; src < 1000000; ++src)
    {
        int dest = src*src; //dest不要该溢出
        char strSrc[100], strDest[100];
        sprintf_s(strSrc, "%d", src);
        sprintf_s(strDest, "%d", dest);
        size_t nSrcLen = strlen(strSrc);
        size_t nDestLen = strlen(strDest);
        if (strncmp(strSrc, strDest+nDestLen-nSrcLen, nSrcLen) == 0)
            printf("%d is the correct number\n", src);
    }
    return 0;

3 楼

深圳市华信群英科技有限公司与知名通信软件公司正式签订定向输送人才的合作协议
针对想进入IT软件行业的有志人士提供专业的企业内训
实训课程采用“2+3”分段教学模式,分为2个月理论强化和3个月项目实训两个阶段
实训前就签订就业安置协议,岗前实训后入职
不仅学费优惠而且是企业定向培训定向招聘,百分百保证就业
有意向请登录www.szctt.com,或加QQ:1179397962做详细咨询

我来回复

您尚未登录,请登录后再回复。点此登录或注册