این الگوریتم تو اردر log n جواب میده
البته اگر از تابع لگاریتم کتابخانه ی math صرف نظر کنیم
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int num;
cin>>num;
int size=int(log2(num))/4+1;
int A[size];
for(int i=0; num!=0; i++)
{
A[i]=num%16;
num/=16;
}
for(int i=size-1; i>=0; i--)
{
if(A[i]<10)
cout<<A[i];
else
{
switch(A[i])
{
case 10:
cout<<'a';
case 11:
cout<<'b';
case 12:
cout<<'c';
case 13:
cout<<'d';
case 14:
cout<<'e';
case 15:
cout<<'f';
}
}
}
return 0;
}
اگر مهمه که از توابع بیرونی استفاده نکنیم میتونید تابع log2 رو این طوری بنویسید
int log2(int num)
{
int c=-1;
while(num!=0)
{
num/=2;
c++;
}
return c;
}