Tutaj masz rozwiazanie: https://wandbox.org/permlink/a2YiIWmcWbTpE4PO
// This file is a "Hello, world!" in C++ language by GCC for wandbox.
#include <iostream>
#include <ctime>
#include <cstdlib>
#define N 10
/**
* Check if given number is primal
*/
bool isPrimal(int n)
{
if (n < 2) {
return false;
}
for (int i=2; (i*i)<=n; i++) { //because math lib is not availably in exercise
if (n%i == 0) {
return false;
}
}
return true;
}
void findPrimals(int *numbers)
{
int found = 0;
std::cout<<"Found primals: ";
for (int i=0; i<N; i++) {
if (isPrimal(numbers[i])) {
std::cout<<i<<" ";
found++;
}
}
if (found <=0) {
std::cout<<"not found";
}
std::cout<<std::endl;
}
void swapElements(int *numbers, int idx1, int idx2)
{
if (idx1 > N || idx2 > N) {
return;
}
std::swap(numbers[idx1], numbers[idx2]);
}
void printArray(int *numbers)
{
std::cout<<"Array: {";
for (int i=0; i<N; i++) {
std::cout<<" "<<numbers[i]<<" ";
}
std::cout<<"}"<<std::endl;
}
int log10(int v)
{
return
(v >= 1000000000) ? 9 : (v >= 100000000) ? 8 :
(v >= 10000000) ? 7 : (v >= 1000000) ? 6 :
(v >= 100000) ? 5 : (v >= 10000) ? 4 :
(v >= 1000) ? 3 : (v >= 100) ? 2 :
(v >= 10) ? 1 : 0;
}
int pow(int x, int n) {
if (n<1) {
return 1;
}
int result = x;
for (;n>1; n--) {
result *= x;
}
return result;
}
bool isPalindrome(int number)
{
int digits = log10(number);
int leftPos, rightPos;
int leftVal, rightVal;
for (rightPos = 1, leftPos=pow(10, digits); rightPos < leftPos; rightPos*=10, leftPos/=10) {
leftVal = (number / leftPos) % 10;
rightVal = (number / rightPos) % 10;
if (rightVal != leftVal) {
return false;
}
}
return true;
}
void findPalindromes(int *numbers)
{
int found = 0;
std::cout<<"Found palindromes: ";
for (int i=0; i<N; i++) {
if (isPalindrome(numbers[i])) {
std::cout<<i<<" ";
found++;
}
}
if (found <=0) {
std::cout<<"not found";
}
std::cout<<std::endl;
}
int sumDigitsInNumber(int number)
{
int digits = log10(number);
int sum = 0;
for (int i=0; i<=digits; i++) {
sum += (number/pow(10, i)) % 10;
}
return sum;
}
void sumDigitsOfNumbers(int *input, int *output)
{
for (int i=0; i<N; i++) {
output[i] = sumDigitsInNumber(input[i]);
}
}
char *base10toBaseN(int number, int outputBase)
{
int divRes, iter = 0;
char output[64];
do {
divRes = number / outputBase;
output[iter] = (number - (divRes*outputBase)) + '0';
number = divRes;
iter++;
} while (divRes > 0);
char *finalOutput = new char(64);
for (int i=1; i<=iter; i++) {
finalOutput[i-1] = output[iter-i];
}
finalOutput[iter] = '\0';
return finalOutput;
}
void convertArrayToBaseN(int *input, char **output, int base)
{
for (int i=0; i<N; i++) {
output[i] = base10toBaseN(input[i], base);
}
}
void printArrayOfChars(char **numbers)
{
std::cout<<"Array: {";
for (int i=0; i<N; i++) {
std::cout<<" "<<numbers[i]<<" ";
}
std::cout<<"}"<<std::endl;
}
int main()
{
int arrayOfIntegers[] = {0, 1, 2, 13331, 4, 5, 66, 7, 1218, 121};
int sumOfDigits[N] = {};
char *convertedNumbers[N] = {};
findPrimals(arrayOfIntegers);
printArray(arrayOfIntegers);
swapElements(arrayOfIntegers, 1, 2);
printArray(arrayOfIntegers);
findPalindromes(arrayOfIntegers);
sumDigitsOfNumbers(arrayOfIntegers, sumOfDigits);
printArray(sumOfDigits);
convertArrayToBaseN(arrayOfIntegers, convertedNumbers, 2);
printArrayOfChars(convertedNumbers);
return 0;
}