排他平方数

排他平方数

1.6位正整数
2.每个数位上数字不同
3.其平方的每个数位不含原数字组成的任何数位

#include <iostream>
#include <sstream>
using namespace std;

sstream 头文件必不可少,下的str函数中是stringstream要用到这个头文件。

void str(long long x,string &xx)
{
    stringstream ss;
    ss<<x;
    ss>>xx;
}

上面的这个函数的作用是将数值型转换成字符型,用了stringstream的方法实现
注意:xx的返回值类型必须为引用类型,否则会造成结果的错误

bool check(long long x,long long xx)
{
    string x1,xx1;
    str(x,x1);
    str(xx,xx1);
    for(int i=0;i<x1.length();i++)
    {
        if(xx1.find(x1[i])!=string::npos)
        {
            return false;
        }
    }
    return true;
}

用穷举的方法将所有六位数都一一列举并验证是否符合条件,注意列举时应当排除有相同数位的数字。

int main()
{
   int a1,a2,a3,a4,a5,a6;
   for(a1=1;a1<=9;a1++)
   {
       for(a2=0;a2<=9;a2++)
       {
           if(a2!=a1)
           for(a3=0;a3<=9;a3++)
           {
               if(a3!=a2&&a3!=a1)
               for(a4=0;a4<=9;a4++)
               {
                   if(a4!=a3&&a4!=a2&&a4!=a1)
                   for(a5=0;a5<=9;a5++)
                   {
                       if(a5!=a4&&a5!=a3&&a5!=a2&&a5!=a1)
                       for(a6=0;a6<=9;a6++)
                       {
                           if(a6!=a5&&a6!=a4&&a6!=a3&&a6!=a2&&a6!=a1)
                           {
                               long long      x=a1*100000+a2*10000+a3*1000+a4*100+a5*10+a6;
                               long long xx=x*x;
                               if(check(x,xx))
                               {
                                   cout<<x<<endl;
                               }
                           }
                       }
                   }
               }
           }
       }
   }
}

最后只输出了两个6位数 203879639172 ,说明只有两个结果符合要求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值