Задача 14. Решение:
#include<iostream>
using namespace std;
int main()
{
int k;
cin>>k;
cout<<(!((k+325)%2==1))<<endl;
return 0;
}Задача 15. В решението на задачата се ползва следният алгоритъм:
- Цифрите на числото се отделят в променливите c1, c2, c3, като се използва целочислено деление с 10.
- Получените цифри се извеждат в обратен ред.
Решение1:
#include<iostream>
using namespace std;
int main()
{
int а,c1,c2,c3;
cin>>а;
c1=a/100;
c2=a/10%10;
c3=a%10;
cout<<c3<<c2<<c1<<endl;
return 0;
}Може да се предложи и второ решение, без да се използват помощни променливи. Цифрите на числото последователно се отделят отдясно наляво и се извеждат на екрана.
#include<iostream>
using namespace std;
int main()
{
int а;
cin>>а;
cout<<(a%10);
cout<<(a/10%10);
cout<<(a/100)<<endl;
return 0;
}Задача 16. За решение на задачата могат да се използват променливите c1, c2, c3, c4, в които да се отделят цифрите на даденото четирицифрено число.
Решение:
#include<iostream>
using namespace std;
int main()
{
unsigned int а,c1,c2,c3,c4;
cin>>а;
c1=a/1000;
c2=a/100%10;
c3=a/10%10;
c4=a%10;
cout<<"Sum="<<c1+c2+c3+c4<<' ';;
cout<<"Pr="<<c1*c2*c3*c4<<endl;
return 0;
}Задача 17. При решението на задачата първо трябва да се отчете фактът, че въведеното петцифрено число може да надвиши диапазона допустими стойности за типа int. В зависимост от компилатора, който се ползва, трябва да се направи избор кой тип е целесъобразно да се използва – int или long.
а) Остатъкът от целочислено деление на нечетно число с числото 2 е 1, а на четно число е 0. Следният алгоритъм дава решението на задачата:
1. Отделят се всички цифри на числото.
2. Съставя се израз, който представлява сбор на остатъците от делението на всяка цифра на числото с 2.
3. Стойността на израза е търсеният резултат (броят на нечетните цифри).
Решение 1:
#include<iostream>
using namespace std;
int main()
{
unsigned long int а;
int c1,c2,c3,c4,c5;
cin>>а;
c1=a/10000;
c2=a/1000%10;
c3=a/100%10;
c4=a/10%10;
c5=a%10;
cout<<c1%2+c2%2+c3%2+c4%2+c5%2<<endl;
return 0;
}б) Използвайки идеята от подусловие а), може да се намери остатъкът от деление на всяка цифра с числото 2. Полученият резултат е 0 или 1 в зависимост от това дали цифрата е четна или нечетна. При умножение на остатъка от делението със самата цифра може да се получи или цифрата, ако тя е нечетна, или 0, ако е четна. Така се получава сумата на нечетните цифри. А сумата на четните може да се намери като разлика от сумата на всички цифри и сумата на нечетните.
Решение 2:
#include<iostream>
using namespace std;
int main()
{
unsigned long int a;
int c1,c2,c3,c4,c5,sum;
cin>>a;
c1=a/10000;
c2=a/1000%10;
c3=a/100%10;
c4=a/10%10;
c5=a%10;
sum=c1+c2+c3+c4+c5;
cout<<(sum-(c1%2*c1+c2%2*c2+c3%2*c3+c4%2*c4+c5%2*c5));
return 0;
}Забележка: Поради това, че операциите умножение и остатък от деление са с еднакъв приоритет, се налага най-напред да се намери остатъкът от делението и след това да се умножава с цифрата.
Задача 18. И тук, както в предната задача, трябва да се отбележи, че типът int няма да отговаря на диапазона на входни данни, поради което трябва да се използва long.
Решение 1:
#include<iostream>
using namespace std;
int main()
{
unsigned long int a;
double sum;
cin>>a;
sum=a/10000000;
sum+=a/1000000%10;
sum+=a/100000%10;
sum+=a/10000%10;
sum+=a/1000%10;
sum+=a/100%10;
sum+=a/10%10;
sum+=a%10;
cout<<sum/8<<endl;
return 0;
}Може да се предложи и второ решение. В него се използва последователно отделяне на последната цифра, натрупването й към сумата и премахването й от числото.
Решение 2:
#include<iostream>
using namespace std;
int main()
{
unsigned long int a;
double sum;
cin>>a;
sum=a%10;
a/=10;
sum+=a%10;
a/=10;
sum+=a%10;
a/=10;
sum+=a%10;
a/=10;
sum+=a%10;
a/=10;
sum+=a%10;
a/=10;
sum+=a%10;
a/=10;
sum+=a%10;
cout<<sum/8<<endl;
return 0;
}Предлагаме и трето решение, в което вместо стандартния подход с отделяне на цифри се използва символна променлива. Тя служи за последователно въвеждане и обработване на всяка цифра от числото. При обработката цифрата се преобразува от символ в число и се добавя към сумата. Необходимо е променливата sum да бъде от целочислен тип. Защо?
Решение 3:
#include<iostream>
using namespace std;
int main()
{
char s;
int sum;
cin>>s;
sum=s-'0';
cin>>s;
sum+=s-'0';
cin>>s;
sum+=s-'0';
cin>>s;
sum+=s-'0';
cin>>s;
sum+=s-'0';
cin>>s;
sum+=s-'0';
cin>>s;
sum+=s-'0';
cin>>s;
sum+=s-'0';
cout<<(double)sum/8<<endl;
return 0;
}При извеждането на резултата се прилага преобразуване на променливата sum до реален тип, за да не се изпълни целочислено деление.
Този подход дава възможност да се обработва n-цифрено число.
Задача 19. За да се реши задачата, трябва да се използва отделяне на цифра. Най-лесно се отделя последната цифра на цяло число. Затова е удачно даденото число да се умножи по 100 и да се превърне в цяло, като се премахне дробната му част. Така търсената цифра ще бъде последна в полученото число.
Забележка: При преобразуване от реален в целочислен тип някои компилатори правят закръгляне на резултата. Това може да промени последната цифра, което налага преди преобразуването да се отреже дробната част на числото чрез функцията floor.
Решение 1:
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main()
{
double a;
long int b;
cin>>a;
a*=100;
a=floor(a);
b=a; //Неявно преобразуване на типа
cout<<setw(5)<<b%10<<endl;
return 0;
} Недостатъкът на това решение е, че при големи стойности на въведеното реално число a може да се надхвърли диапазонът на цялото число b. Поради тази причина е удачно цялата част на числото да се преобразува в нула по следния начин: a=a-floor(a);.
Така за окончателно решение се получава:
Решение 2:
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main()
{
double a;
int b;
cin>>a;
a=a-floor(a);
a*=100;
a=floor(a);
b=a;//Неявно преобразуване на типа
cout<<setw(5)<<b%10<<endl;
return 0;
}