Rozdział 12. Cyfry liczb

Zadanie 12.1

Napisz program wyznaczający liczbę cyfr zadanej liczby.

Rozwiązanie: 12-01.cpp

#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, char *argv[])
{
  int n,rob,liczbacyfr;
  
  
  cout << "Program wyznacza liczbę cyfr zadanej liczby.\n";
  cout << "(C)2003 student\n\n\n";  
  
  cout << "Podaj liczb n=";
  cin  >> n;
  
  liczbacyfr=0;
  rob=n;
  
  if ( rob == 0 )
    liczbacyfr=1;
  else  
    while (rob>0)
      {
        liczbacyfr++;
        rob/=10;
      }
      
  cout << "Liczba " << n << " ma " << liczbacyfr << " cyfr(y)." << endl << endl;
  
  system("PAUSE");	
  return 0;
}

Zadanie 12.2

Napisz program wyznaczający sumę cyfr liczby.

Rozwiązanie: 12-02.cpp

#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, char *argv[])
{
  int a,b,j,i,n,rob,nieparzysta,pierwiastek,liczbacyfr,potegadziesiatki;
  
  
  cout << "Program drukuje na ekranie liczby z podanego zakresu kończące się swoim pierwiastkiem.\n";
  cout << "UWAGA: interesują nas wyłącznie liczby, które posiadają pierwiastek całkowity!\n";  
  cout << "(C)2003 student\n\n\n";  
  
  cout << "a=";
  cin  >> a;
  
  cout << "b=";
  cin  >> b;
  
  for (j=a;j<=b;j++)
    {
    
      pierwiastek=0;
      nieparzysta=1;
      rob = j;
  
      while (rob>=0)
        {
          rob -= nieparzysta;    
          nieparzysta+=2;
          pierwiastek++;
        }
      pierwiastek--;
      
      if (pierwiastek*pierwiastek == j)
        {

  
          //liczba cyfr pierwiastka
          liczbacyfr = 0;
          rob=pierwiastek;
          while(rob)
            {
              liczbacyfr++;
              rob/=10;
            }
  
          //potęga liczby 10
          potegadziesiatki=1;
          for(i=1;i<=liczbacyfr;i++)
            potegadziesiatki*=10;  
    
          if (j % potegadziesiatki == pierwiastek)  
            cout << "\n" << j ;
        }        
        
    }//koniec pętli for  
    
  cout << "\n\n" ;    
   
  system("PAUSE");	
  return 0;
}

Zadanie 12.3

Napisz program sumujący cyfry zadanej liczby. Proces sumowania powtarzamy aż do momentu otrzymania liczby jednocyfrowej.

Rozwiązanie: 12-03.cpp

#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, char *argv[])
{
  int n,robn,suma,ostatniacyfra;
  
  
  cout << "Program wyznacza sumę cyfr zadanej liczby.\n";
  cout << "(C)2003 student\n\n\n";  
  
  cout << "Podaj liczb n=";
  cin  >> n;
  
  robn=n;
  suma=0;
  
  while (robn>0)
      {
        ostatniacyfra = robn % 10;
        robn = robn / 10;
        
        suma += ostatniacyfra;
      }
      
  cout << "Suma cyfr liczby " << n << " = " 
        << suma << "." << endl << endl;
  
  system("PAUSE");	
  return 0;
}

Zadanie 12.4

Napisz program stwierdzający, czy zadana liczba jest palindromem.

Rozwiązanie: 12-04.cpp

#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, char *argv[])
{
  int n,robn,suma,ostatniacyfra;
  
  
  cout << "Program wyznacza sumę cyfr zadanej liczby.\n";
  cout << "Proces powtarzamy aż do otrzymania liczby jednocyfrowej.\n";  
  cout << "(C)2003 student\n\n\n";  
  
  cout << "Podaj liczb n=";
  cin  >> n;
  
  cout << "Suma cyfr liczby " << n << " => " ;  
  
  robn=n;
  
  while ( robn > 9 )
    {
      suma=0;
  
      while (robn>0)
          {
            ostatniacyfra = robn % 10;
            robn = robn / 10;
        
            suma += ostatniacyfra;
          }
      robn=suma;
      cout << robn << " => " ;        
    }      
      
  cout << robn << "." << endl << endl;
  
  system("PAUSE");	
  return 0;
}

Zadanie 12.5

Jaki jest największy palindrom mieszczący się w typie int?

Rozwiązanie: 12-05.cpp

#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, char *argv[])
{
  int n,robn,ostatniacyfra,odwrotna;
  
  
  cout << "Program sprawdza czy zadana liczba jest palindromem.\n";
  cout << "(C)2003 student\n\n\n";  
  
  cout << "Podaj liczb n=";
  cin  >> n;
  
  robn     = n;
  odwrotna = 0;
  
  while (robn)
    {
      ostatniacyfra=robn % 10;
      robn /= 10;
      
      odwrotna = odwrotna * 10 + ostatniacyfra;
    }

  if (odwrotna==n)  
    cout << "\n\nPALINDROM\n\n" 
         << n <<  " = " << odwrotna << endl << endl;
  else
    cout << "\n\n NIE-PALINDROM\n\n" 
         << n <<  " != " << odwrotna << endl << endl;
           
  system("PAUSE");	
  return 0;
}

Zadanie 12.6

Wydrukuj na ekranie wszystkie palindromy z zakresu od a do b. Liczby a i b wczytujemy z klawiatury.

Rozwiązanie: 12-06.cpp

#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, char *argv[])
{
  int rob;
  
  
  cout << "Program wyznacza największą liczbę mieszczącą się w typie int.\n";
  cout << "(C)2003 student\n\n\n";  
  
  rob=-1;
  
  while (rob<0)
    rob--;
    
    
  //  
  // for (rob=-1;rob<0;rob--);    
  //
  
  
  cout << "\n\nMAX int = " 
         << rob << endl ;
         
  cout << "\n\nMIN int = " 
         << rob + 1 << endl << endl;
         
         
         
  system("PAUSE");	
  return 0;
}

Zadanie 12.7

Napisz program, sprawdzający, czy wszystkie cyfry zadanej liczby są parzyste.

Rozwiązanie: 12-07.cpp

#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, char *argv[])
{
  int a,b,i,odwrotna,rob;
  
  
  cout << "Program wyznacza palindromy z zadanego zakresu.\n";
  cout << "(C)2003 student\n\n\n";  
  
  cout << "a=";
  cin  >> a;
  
  cout << "b=";
  cin  >> b;
  
  cout << "\n\n"; 
  
  for (i=a;i<=b;i++)
    {
      rob=i;
      odwrotna=0;
      while (rob)
        {
          odwrotna = odwrotna * 10 + rob % 10;
          rob /= 10;
        }
 
      if (odwrotna==i)  
          cout << i << "\n";
    }
         
  system("PAUSE");	
  return 0;
}

Zadanie 12.8

Napisz program, drukujący liczbę w odwrotnej kolejności.

Rozwiązanie: 12-08.cpp

#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, char *argv[])
{
  int n,robn,ostatniacyfra;
  
  
  cout << "Program sprawdza, czy wszystkie cyfry zadanej liczby są parzyste.\n";
  cout << "(C)2003 student\n\n\n";  
  
  cout << "n=";
  cin  >> n;
  
  robn = n;
  ostatniacyfra = n % 10;
  while ((ostatniacyfra % 2 == 0)  && (robn))
    {
      robn /= 10;
      ostatniacyfra = robn % 10;
    }
    
  if (robn) 
    cout << "Liczba " << n << " ma conajmniej jedną nieparzystą cyfrę!\n\n\n";
  else   
    cout << "Wszystkie cyfry liczby " << n << " są parzyste!\n\n\n";  
         
  system("PAUSE");	
  return 0;
}

Zadanie 12.9

Napisz program stwierdzający, czy liczba kończy się swoim pierwiastkiem?

Rozwiązanie: 12-09.cpp

#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, char *argv[])
{
  int n,robn,ostatniacyfra;
  
  
  cout << "Program drukuje zadaną liczbę w odwrotnej kolejności.\n";
  cout << "(C)2003 student\n\n\n";  
  
  cout << "n=";
  cin  >> n;
  
  cout << "\n\nLiczba " << n << " w odwrotnej kolejności ";  
  
  if (n)
    {
      robn = n;
      while (robn)
        {
          ostatniacyfra = robn % 10;
          cout << ostatniacyfra;
          robn = robn /10;      
        }  
    }
  else
    cout << "0";  
  
    
  cout << "\n\n";      
    
  system("PAUSE");	
  return 0;
}

Zadanie 12.10

Napisz program drukujący na ekranie wszystkie liczby z zakresu od a do b kończące się swoim pierwiastkiem.

Rozwiązanie: 12-10.cpp

#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, char *argv[])
{
  int i,n,rob,nieparzysta,pierwiastek,liczbacyfr,potegadziesiatki;
  
  
  cout << "Program sprawdza, czy liczba kończy się swoim pierwiastkiem.\n";
  cout << "(C)2003 student\n\n\n";  
  
  cout << "n=";
  cin  >> n;
  
  
  pierwiastek=0;
  nieparzysta=1;
  rob = n;
  
  while (rob>=0)
    {
      rob -= nieparzysta;    
      nieparzysta+=2;
      pierwiastek++;
    }
  pierwiastek--;
  
  //cout << "Pierwiastek z liczby " <<  n << " wynosi " << pierwiastek << "\n\n";    
  
  //liczba cyfr pierwiastka
  liczbacyfr = 0;
  rob=pierwiastek;
  while(rob)
    {
      liczbacyfr++;
      rob/=10;
    }
  
  //cout << "Liczba cyfr pierwiastka LC=" << liczbacyfr << "\n\n";      
  
  
  
  //potęga liczby 10
  
  
  potegadziesiatki=1;
  for(i=1;i<=liczbacyfr;i++)
    potegadziesiatki*=10;  
    
  if (n % potegadziesiatki == pierwiastek)  
    cout << "\n\nTAK\n\n" << n << " kończy się liczbą " << pierwiastek << "\n\n";
  else  
    cout << "\n\nNIE\n\n" << n << " NIE kończy się liczbą " << pierwiastek << "\n\n";  
    
   
  system("PAUSE");	
  return 0;
}

Zadanie 12.11

Napisz program drukujący na ekranie zadaną liczbę zastępując jej kolejne cyfry ich kwadratami (dla liczby 127 drukujemy 1449).

Zadanie 12.12

Napisz program drukujący na ekranie zadaną liczbę zastępując jej kolejne cyfry ich sześcianami.

Zadanie 12.13

Napisz program drukujący na ekranie zadaną liczbę zastępując jej kolejne cyfry liczbami powstałymi przez dodanie do cyfr liczby 1 (1598 = 26109).

Zadanie 12.14

Napisz program drukujący na ekranie zadaną liczbę zastępując jej kolejne cyfry liczbami powstałymi przez dodanie do cyfr liczb 1, 2, 3, 4 itd. Do liczby najmniej znaczącej (liczba jedności) dodajemy 1, do liczby dziesiątek dodajemy 2 itd. (1598 = 58119).

Zadanie 12.15

Napisz program drukujący na ekranie zadaną liczbę zastępując jej kolejne cyfry liczbami powstałymi przez następujące działanie:

  • do każdej cyfry dodać jej kwadrat,
  • wynik wydzielić modulo 10.

np. dla 1234 mamy 1234 + (1 4 9 16) = (2 6 12 20) = 2620

Zadanie 12.16

Napisz program znajdujący wszystkie trójki liczb pitagorejskich z zadanego przedziału.


©2010 Włodzimierz Gajda