C++ 找到一个整数,其平方值具有特定模式

C++ 找到一个整数,其平方值具有特定模式,c++,C++,我想找到一个名为result的整数,其中它的平方值(result^2)的模式为1_2_3_4_5_6_7_8_9_0(其中_为数字)。我的方法是,找到所有具有这种模式的数字,然后找到平方根为整数的数字: #include <cmath> #include <string> using std::string; int main(){ std::string candidate; long result; long maxPosible

我想找到一个名为
result
的整数,其中它的平方值(
result
^2)的模式为1_2_3_4_5_6_7_8_9_0(其中_为数字)。我的方法是,找到所有具有这种模式的数字,然后找到平方根为整数的数字:

 #include <cmath>
#include <string>

using std::string;

int main(){

    std::string candidate;

    long result; 

    long maxPosibleSq = 1929394959697989990;
    long minPosibleSq = 1020304050607080900;


    for (long i=minPosibleSq; i<=maxPosibleSq; i+=10 /*last digit is always 0*/){
        if (sqrt(i)==floor(sqrt(i))){
            candidate = std::to_string(i);
            if (candidate[2]=='2' && candidate[4]=='3' && candidate[6]=='4' && candidate[8]=='5' && candidate[10]=='6'
            && candidate[12]=='7' && candidate[14]=='8' && candidate[16]=='9'){
                result=std::stol(candidate);
                break;
            }
        }
    }

    return 0;
}
#包括
#包括
使用std::string;
int main(){
std::字符串候选;
长期结果;
长maxPosibleSq=1929394959697989990;
长minPosibleSq=1020304050607080900;

对于(long i=minPosibleSq;i另一种方法是遍历一系列整数,这些整数可能是
1_2_3_4_5_6_7_8_9_0
。范围介于
sqrt(10203040506070809)
sqrt(19293949596979899)的平方根之间
。大约有3.8亿个这样的数字。计算每个数字的平方根,看看它是否符合模式

更妙的是,你可以以10步的速度跨过这个范围,因为你答案的最后一位数字必须是零,因为它的平方以零结尾。因此,你只有大约3800万个数字要通过


为了避免溢出错误,请使用
unsigned long long
,它将为您提供64位整数。您可以表示的最大数字是
18446744073709551615
,它有20位。

如果您正在做这类事情,请参阅。或者,请参阅关于的答案。例如,我不太理解数字应该是唯一的,即13233343536373383930或17273774757677787970,而不是112233445667788990???@AtmaneELBOUACHRI所有提到的数字都可能是候选数字我们知道答案必须是9位数字。以1开头,以0结尾。所以我们只需要380万个数字