#include
#include //Нужно для генерации n - значных чисел
using namespace std;
int getRandVal(int n);//Функция генерирует случайное n-ое число
//Функция вернёт массив цифр составляющих число val
//переменная n будет содержать число цифр в массиве
//флаг bGetArray определяет записывать ли разряды в
//массив или лишь ограничиться подсчётом разрядов числа
int * splitValue(int val, int &n, bool bGetArray);
//Функция проверяет состоит ли число только из нечётных чисел
bool isValueConsistOnlyNoOddNumbers(int val);
int main()
{
int i;
int m;//Будет содержать число чисел для анализа
int n;//Будет содержать число разрядов для чисел
int sum;//Будет содержать сумму чисел
int cnt;//Будет содержать кол-во n-значных чисел
//состоящих только из нечётных значений
int *arr = NULL;//Указатель на массив с n-значн числами
while(true)
{
system("cls");
cout<<"Enter number values in array : ";cin>>m;
cout<<"Enter n digits in values : ";cin>>n;
arr = new int[m];
cout<<<span>"Generated array of values\n";
for(i = 0; i < m; i++)
cout<<(arr[i] = getRandVal(n))<<endl;
cout<<<span>"Values in array with only odd numbers\n";
for(sum = (cnt = (i = 0)); i < m; i++)
{
if(isValueConsistOnlyNoOddNumbers(arr[i]))
{
cout<<arr[i]<<endl;
sum = sum + arr[i];
cnt = cnt + 1;
}
}
delete [] arr;
if(!cnt)
cout<<"array not contain values which consist"
<<<span>" only from no-odd numbers\n";
else
{
cout<<"sum of values which consist"
<<" only from no-odd numbers is "
<<sum<<endl;
//Разбиваем значение суммы на разряды
arr = splitValue(sum, n, true);
for(cnt = (i = 0); i < n; i++)
{
if(!isValueConsistOnlyNoOddNumbers(arr[i]))
cnt = cnt + 1;
}
cout<<"given sum contains from "<<cnt<<<span>" odditive numbers\n";
delete [] arr;
}
system("pause");
}
return 0;
}
int getRandVal(int n)
{
int val = 0;
int nDigits = 0;
//Будем продолжать генерацию
//пока не сгенерируем случ
//n-значное число
while(nDigits != n)
splitValue((val = rand()%RAND_MAX), nDigits, false);
return val;
}
int * splitValue(int val, int &n, bool bGetArray)
{
int * arr = NULL;//Указатель на массив с разрядами числа val
if(val < 0)
val *= -1;//Знак числа нам не нужен
//Подсчитываем число разрядов в числе
int i, buf = val;
for(n = 0; 0 < buf; n++)
buf = buf / 10;
//Выделяем память под массив чисел
if(bGetArray)
{
arr = new int[n];
for(i = 0; 0 < val; i++)
{
//Записываем в массив цифры разрядов числа
arr[i] = val % 10;
val = val / 10;
}
}
return arr;
}
bool isValueConsistOnlyNoOddNumbers(int val)
{
bool bRet = true;
int nDigits = 0;
int * array = splitValue(val,nDigits,true);
for(int i = 0; i < nDigits && bRet; i++)
{
if(array[i]%2 == 0)
bRet = false;
}
delete [] array;
return bRet;
}