Ввести целое число N, вывести ближейшую к N степень числа 2 - C (СИ)
Формулировка задачи:
Ввести целое число N, вывести ближейшую к N степень числа 2.
Здравствуйте, можно переделать код СИ ++ на СИ, и указать на ошибки, если они имеются ( а они имеются, т.к. у меня она работает через раз -_-)
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int n,j,a,b,x,y;
cout<<"Enter N: ";
cin>>n;
a=0;
b=0;
for(j=1;j<9999;j++)
{
if(pow(2,j-1)<=n && pow(2,j)>=n)
{
a=j-1;
b=j;
}
if(b!=0)
break;
}
x=abs(pow(2,a)-n);
y=pow(2,b)-n;
if(x<y)
cout<<"2 in"<<a<<endl;
else
cout<<"2 in"<<b<<endl;
system("pause");
getch();
return 0;
}Решение задачи: «Ввести целое число N, вывести ближейшую к N степень числа 2»
textual
Листинг программы
/*Ввести целое число N, вывести ближайшую к N степень числа 2.
*/
#include <stdio.h>
#include <math.h>
int main() {
int min, max, num;
printf("N = ");
scanf("%d", &num);
fflush(stdin);
min = floor(log(1.*num) / log(2.));
max = ceil(log(1.*num) / log(2.));
printf("Nearest power: %d", num - pow(2.,min) > pow(2.,max) - num ? max : min);
getchar();
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы сprintf, scanf и математическими функциями
- Объявляем переменные min, max и num типа int
- Выводим запрос на ввод числа N с помощью функции printf
- Считываем число N с помощью функции scanf и сохраняем его в переменную num
- Используем функцию fflush для очистки буфера ввода
- Вычисляем ближайшую степень числа 2 к N с помощью функций log и pow
- Присваиваем значения переменным min и max
- Выводим ближайшую степень числа 2 к N на экран с помощью функции printf
- Ждем нажатия любой клавиши с помощью функции getchar
- Завершаем программу с кодом 0