fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main()
  5. {
  6. int indeks=1;
  7. int digit[18];
  8. /*
  9. freopen("output.txt","w",stdout);
  10. long long num=1,comp=10,sumdigit=0;
  11. for(int temp=0;temp<18;temp++) digit[temp]=0;
  12. while(sumdigit<=2000000000)
  13. {
  14.  
  15. long long x=num;
  16. x=x*x;
  17. if(x<comp)
  18. {
  19. digit[indeks]++;
  20. }
  21. else
  22. {
  23. printf("digit[%d] = %d\n",indeks,digit[indeks]);
  24. indeks++;
  25. comp=comp*10;
  26. digit[indeks]++;
  27. }
  28. sumdigit+=indeks;
  29. num++;
  30. }
  31. printf("digit[%d] = %d\n",indeks,digit[indeks]);
  32. */
  33. digit[1] = 3;
  34. digit[2] = 6;
  35. digit[3] = 22;
  36. digit[4] = 68;
  37. digit[5] = 217;
  38. digit[6] = 683;
  39. digit[7] = 2163;
  40. digit[8] = 6837;
  41. digit[9] = 21623;
  42. digit[10] = 68377;
  43. digit[11] = 216228;
  44. digit[12] = 683772;
  45. digit[13] = 2162278;
  46. digit[14] = 6837722;
  47. digit[15] = 21622777;
  48. digit[16] = 68377223;
  49. digit[17] = 26249855;
  50. int tc;
  51. scanf("%d",&tc);
  52. while(tc--)
  53. {
  54. int x,indeks=1;
  55. scanf("%d",&x);
  56. int prefix=0;
  57. while(x>digit[indeks]*indeks)
  58. {
  59. x-=digit[indeks]*indeks;
  60. prefix+=digit[indeks];
  61. indeks++;
  62. }
  63. x--;
  64. int bucket=x/indeks;
  65. int pos=x%indeks;
  66. long long num=prefix+bucket+1;
  67. num=num*num;
  68. string s=to_string(num);
  69. printf("%c %lld\n",s[pos],num);
  70. }
  71. }
Success #stdin #stdout 0s 3472KB
stdin
10
1
2
3
4
5
6
7
8
9
20
stdout
1 1
4 4
9 9
1 16
6 16
2 25
5 25
3 36
6 36
2 121