Задача: Числа Армстронга
Исходник: Числа армстронга, язык: C++ [code #597, hits: 9528]
аноним: PointsEqual [добавлен: 29.11.2009]
  1. #include <iostream>
  2. #include <conio.h>
  3.  
  4. using namespace std;
  5.  
  6. int NumberToPower(int number, int power);
  7. int Power(int in_number);
  8. int Armstrong(int number);
  9. int BruteForce(int number);
  10.  
  11. int main()
  12. {
  13. cout<<"vvedite chislo: ";
  14. //system("cls");
  15. int in_number=0;
  16. cin>>in_number;
  17. cout<<"Posledovatelnost chisel Armstronga::"<< endl<< endl;
  18. Armstrong(in_number);
  19. getch();
  20. return 0;
  21. }
  22.  
  23. int NumberToPower(int number, int power)
  24. {
  25. int tmp=1;
  26. while (power)
  27. {
  28. if (power & 1)
  29. tmp*=number;
  30. number*=number;
  31. power>>=1;
  32. }
  33. return tmp;
  34. }
  35.  
  36.  
  37. int Power(int in_number)
  38. {
  39. if (in_number<10)
  40. return 1;
  41. if ((in_number>9) and (in_number<100))
  42. return 2;
  43. if ((in_number>99) and (in_number<1000))
  44. return 3;
  45. if ((in_number>999) and (in_number<10000))
  46. return 4;
  47. if ((in_number>9999) and (in_number<100000))
  48. return 5;
  49. if ((in_number>99999) and (in_number<1000000))
  50. return 6;
  51. if ((in_number>999999) and (in_number<10000000))
  52. return 7;
  53. if ((in_number>9999999) and (in_number<100000000))
  54. return 8;
  55. if ((in_number>99999999) and (in_number<1000000000))
  56. return 9;
  57. if ((in_number>999999999) and (in_number<=(sizeof(unsigned int))))
  58. return 10;
  59. }
  60.  
  61. int Armstrong(int in_number)
  62. {
  63. const int size_row=10;
  64. const int size_col=10;
  65. int MPower[size_row][size_col]= { {0,1,2,3,4,5,6,7,8,9},
  66. {1,0,0,0,0,0,0,0,0,0},
  67. {2,0,0,0,0,0,0,0,0,0},
  68. {3,0,0,0,0,0,0,0,0,0},
  69. {4,0,0,0,0,0,0,0,0,0},
  70. {5,0,0,0,0,0,0,0,0,0},
  71. {6,0,0,0,0,0,0,0,0,0},
  72. {7,0,0,0,0,0,0,0,0,0},
  73. {8,0,0,0,0,0,0,0,0,0},
  74. {9,0,0,0,0,0,0,0,0,0} };
  75. int out_number=0;
  76. int next_symb=0;
  77. int sum=0;
  78. unsigned short i=1;
  79. unsigned short j=0;
  80.  
  81. while (i<=size_col-1)
  82. {
  83. j=1;
  84. while (j<=size_row-1)
  85. {
  86. MPower[i][j]=NumberToPower(i,j);
  87. j++;
  88. }
  89. i++;
  90. }
  91.  
  92. /*************************************
  93. * for (i=0; i<size_col; i++) *
  94. * { *
  95. * for (j=0; j<size_row; j++) * вывод таблицы степеней
  96. * cout<<MPower[i][j]<<"/t"; *
  97. * } *
  98. **************************************/
  99.  
  100. out_number=in_number;
  101.  
  102. while (in_number>=0)
  103. {
  104. while (out_number)
  105. {
  106. if (!(out_number%10))
  107. {
  108. next_symb=(out_number%100)/10;
  109. out_number/=100;
  110. }
  111. else
  112. {
  113. next_symb=out_number%10;
  114. out_number/=10;
  115. }
  116. sum+=MPower[next_symb][Power(in_number)];
  117. }
  118.  
  119. if (sum == in_number )
  120. cout<< in_number<< " "<< endl;
  121. in_number--;
  122. out_number=in_number;
  123. sum=0;
  124. }
  125. cout<< endl<< "completed";
  126. }
  127.  
  128.  
  129. //int BruteForce(int number)
  130. //{
  131.  
  132. //}
Числа армстронга

+добавить реализацию