Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Suma liczby i jej rewersu=palindrom

Ostatnio zmodyfikowano 2016-10-24 08:59
Autor Wiadomość
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:

C/C++
#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;
}
P-152805
carlosmay
» 2016-10-24 08:59:43
C/C++
#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";
}
P-152851
« 1 »
  Strona 1 z 1