我想找到一個稱爲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;
}
編譯器給我的警告潛在的溢出,因爲maxPosibleSq
和minPosibleSq
太大。有沒有更好更快的方法來做到這一點?
作爲一般主題領域,如果您正在做這類事情,請參閱[任意精度算術](https://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic)。或者看到關於[100位數字的平方根](http://stackoverflow.com/a/15998678)的答案。 – HostileFork
我聽不懂。這些數字應該是唯一的: 1323334353637383930或1727374757677787970 而不是1122334455667788990 ??? – Coding4Fun
@AmermaneBOUACHRI所有提到的都可能成爲候選人 –