Suma liczby i jej rewersu=palindrom
Ostatnio zmodyfikowano 2016-10-24 08:59
Wiktor97 Temat założony przez niniejszego użytkownika |
Suma liczby i jej rewersu=palindrom » 2016-10-23 14:00:08 Witam.Mam dość dziwny problem z moim programem.Mianowicie ma on za zadanie wziąć jakąś liczbę n np. 13 a następnie zrobić jej rewers (w tym przypadku to 31). Na koniec program ma dodać liczbę n i jej rewers po czym stwierdzić czy ta suma jest palindromem(u nas 13 + 31 = 44 , 44 jest palindromem). Jeśli suma nie jest palindromem jak np dla liczby 196 (n=196,rewers=691,suma=196+691=887 ; a 887 nie jest palindromem)to ma zrobić rewers tej sumy i dodać ja do sumy itd.Tak ma teoretycznie działać mój program.Zajmijmy się zatem małymi liczbami dwucyfrowymi.I teraz uwaga raz działa raz nie . Np dla 12 działa dla 13 i 14 też ale już dla 15 nie działa bo się craschuje.Nie wiem co robić może wy mi pomożecie.Tu daje program: #include <iostream>
using namespace std;
int main() { const int max = 1000; bool czy = false; int tablica[ max ], rewers[ max ], a, i, p; for( a = 3; a < max; a++ ) tablica[ a ] = 0; tablica[ 0 ] = 1; tablica[ 1 ] = 4; tablica[ 2 ] = 0; rewers[ 0 ] = 4; rewers[ 1 ] = 1; rewers[ 2 ] = 0; while( true ) { p = 0; a = 0; do { tablica[ a ] =( tablica[ a ] + rewers[ a ] + p ) % 10; p =( tablica[ a ] + rewers[ a ] + p ) / 10; a++; } while( p != 0 || tablica[ a ] != 0 ); a = a - 1; for( i = 0; i <= a; i++ ) cout << tablica[ i ]; for( i = 0; i <= a; i++ ) { rewers[ a - i ] = tablica[ i ]; } i = 0; while( i <= a ) { if( rewers[ i ] == tablica[ i ] ) czy = 1; if( rewers[ i ] != tablica[ i ] ) { czy = 0; break; } i++; } cout << endl; if( czy ) break; } cout << "Tak"; return 0; }
|
|
carlosmay |
» 2016-10-24 08:59:43 #include <iostream> #include <string>
bool isPalindrom( std::string const & text ) { std::size_t n = 0; std::size_t r = text.size() - 1; while( n < r ) { if( text[ n ] != text[ r ] ) { return false; } ++n; --r; } return true; }
std::string reverseNum( std::string const & norm ) { std::string rev { }; for( auto crit = norm.crbegin(); crit != norm.crend(); ++crit ) { rev.push_back( * crit ); } return rev; }
int main() { std::string num { }; std::cin >> num; std::string text { std::to_string( std::stoi( num ) + std::stoi( reverseNum( num ) ) ) }; while( !isPalindrom( text ) ) { text += reverseNum( text ); } std::cout << text << " jest palindromem\n"; } |
|
« 1 » |