C #-255 자
int x=100;decimal k=0;while(x>0){k++;decimal d=k*k;string s=d.ToString("n").Replace(",","").Split('.')[0];int g=k.ToString().Length;int h=s.Length;if(k==d||(h!=g&&long.Parse(s.Substring(h-g))+long.Parse(s.Substring(0,h-g))==k)){Console.Write(k+" ");x--;}}
x는 코드에서 찾을 Kaprekar 숫자의 수입니다. 이것은 1에서 100까지의 범위에서 테스트되었지만 이보다 더 많은 것을 지원해야합니다. 처음 50 개는 약 1 초 밖에 걸리지 않았지만 100 개 숫자는 2 시간 반이 걸렸습니다.
산출:
1 9 45 55 99 297 703 999 2223 2728 4950 5050 7272 7777 9999 17344 22222 77778
82656 95121 99999 142857 148149 181819 187110 208495 318682 329967 351352 356643
390313 461539 466830 499500 500500 533170 538461 609687 643357 648648 670033
681318 791505 812890 818181 851851 857143 961038 994708 999999 4444444 4927941
5072059 5555556 9372385 9999999 11111112 13641364 16590564 19273023 19773073
24752475 25252525 30884184 36363636 38883889 44363341 44525548 49995000 50005000
55474452 55636659 61116111 63636364 69115816 74747475 75247525 80226927 80726977
83409436 86358636 88888888 91838088 94520547 99999999 234567901 332999667
432432432 567567568 667000333 765432099 999999999 1111111111 1776299581 2020202020
3846956652 3888938889 4090859091 4132841328 4756047561
이 코드를 정리하면 다음과 같습니다.
int x = 100;
decimal k = 0;
while (x > 0)
{
k++;
decimal d = k * k;
string s = d.ToString("n").Replace(",", "").Split('.')[0];
int g = k.ToString().Length;
int h = s.Length;
if (k == d || (h != g && long.Parse(s.Substring(h - g)) + long.Parse(s.Substring(0, h - g)) == k) )
{
Console.Write(k + " "); x--;
}
}
이것이 더 짧아 질 수 있는지 알고 싶습니다.
n
최대 100 개를 지원해야 함을 의미합니다 .