Числа Армстронга
реализации: C++, количество: 3
реализации(исходники)
+добавить
В исходном массиве перенести вначале все числа Армстронга, а затем все остальные, не меняя порядок их следования.
Реализации: C++(3) +добавить реализацию
заполните необходимые поля!
1) Числа Армстронга, одномерные массивы, code #571[автор:IAkut]
#include <stdio.h> #include <conio.h> #include <math.h> int cisla (int); void main() { int a[10]; clrscr(); // vvod massiva for(int i=0;i<10;i++) scanf("%3d",&a[i]); // vyvod massiva for(i=0;i<10;i++) getch(); //otsortirovannii massiv int s,j,temp; for(i=0;i<10;i++) { s=cisla(a[i]); if(s) { } } getch(); } int cisla(int x) { int k,t,n,s; if (x!=0) { t=x; k=0; n=x; while(n>0) { k++; n/=10; } s=0; while(t>0) { s+=pow(t%10,k); t/=10; } } if (x==s) return(x); else return(0); }

#include <iostream> #include <conio.h> using namespace std; int NumberToPower(int number, int power); int Power(int in_number); int Armstrong(int number); int BruteForce(int number); int main() { cout<<"vvedite chislo: "; //system("cls"); int in_number=0; cin>>in_number; cout<<"Posledovatelnost chisel Armstronga::"<< endl<< endl; Armstrong(in_number); getch(); return 0; } int NumberToPower(int number, int power) { int tmp=1; while (power) { if (power & 1) tmp*=number; number*=number; power>>=1; } return tmp; } int Power(int in_number) { if (in_number<10) return 1; if ((in_number>9) and (in_number<100)) return 2; if ((in_number>99) and (in_number<1000)) return 3; if ((in_number>999) and (in_number<10000)) return 4; if ((in_number>9999) and (in_number<100000)) return 5; if ((in_number>99999) and (in_number<1000000)) return 6; if ((in_number>999999) and (in_number<10000000)) return 7; if ((in_number>9999999) and (in_number<100000000)) return 8; if ((in_number>99999999) and (in_number<1000000000)) return 9; if ((in_number>999999999) and (in_number<=(sizeof(unsigned int)))) return 10; } int Armstrong(int in_number) { const int size_row=10; const int size_col=10; int MPower[size_row][size_col]= { {0,1,2,3,4,5,6,7,8,9}, {1,0,0,0,0,0,0,0,0,0}, {2,0,0,0,0,0,0,0,0,0}, {3,0,0,0,0,0,0,0,0,0}, {4,0,0,0,0,0,0,0,0,0}, {5,0,0,0,0,0,0,0,0,0}, {6,0,0,0,0,0,0,0,0,0}, {7,0,0,0,0,0,0,0,0,0}, {8,0,0,0,0,0,0,0,0,0}, {9,0,0,0,0,0,0,0,0,0} }; int out_number=0; int next_symb=0; int sum=0; unsigned short i=1; unsigned short j=0; while (i<=size_col-1) { j=1; while (j<=size_row-1) { MPower[i][j]=NumberToPower(i,j); j++; } i++; } /************************************* * for (i=0; i<size_col; i++) * * { * * for (j=0; j<size_row; j++) * вывод таблицы степеней * cout<<MPower[i][j]<<"/t"; * * } * **************************************/ out_number=in_number; while (in_number>=0) { while (out_number) { if (!(out_number%10)) { next_symb=(out_number%100)/10; out_number/=100; } else { next_symb=out_number%10; out_number/=10; } sum+=MPower[next_symb][Power(in_number)]; } if (sum == in_number ) cout<< in_number<< " "<< endl; in_number--; out_number=in_number; sum=0; } cout<< endl<< "completed"; } //int BruteForce(int number) //{ //}
Числа армстронга

#include <iostream> #include <ctime> int main() { int const ht=10; int RePow[ht][ht]; for (int i1 = 0; i1 < ht; ++i1)for (int i2 = 0; i2 <ht; ++i2) { RePow[i1][i2] = pow(i1, i2); } int const r = 100; int sum = 0, count = 0, max = 999999999, temp,t1,t2,joj=1,sum1=0,temp1,i=0,z=-1,po=0; int mass[r]; unsigned int start_time = clock(); while ( i < max) { temp = i; while (temp != 0) { t1 = temp % 10; temp = temp / 10; t2 = temp % 10; if (t1 < t2 && temp>0 && t1 != 0) { joj = 0; break;} ++count; } if (joj == 1) { temp = i; while (temp) { sum += RePow[temp % 10][ count]; temp = temp / 10; } for (int j1 = 0; j1 < po; ++j1) { if (sum == mass[j1]) joj = 0; } if (joj != 0) { temp1 = sum; while (temp1) { sum1 += RePow[temp1 % 10][count]; temp1 = temp1 / 10; } if (sum1 == sum) { std::cout << sum << std::endl; mass[po] = sum; ++po; } } } sum = 0; count = 0; joj = 1,temp1=0,sum1=0; ++i; } unsigned int end_time = clock(); // конечное время unsigned int search_time = end_time - start_time; // искомое время std::cout << search_time/1000.00<< std::endl; system("pause"); return 0; }
