تبدیل باینری به دسیمال زمان کامپایل - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

تبدیل باینری به دسیمال زمان کامپایل

+1 امتیاز

من برای تبدیل binary به decimal کد زیر رو نوشتم
حالا دنبال راهی هستم که این کد رو با template ها زمان کامپایل انجام بدم  ولی هر کار کردم نشد

این کد :

#include <iostream>

unsigned binary(unsigned long N)
{
    unsigned result = 0;
    for (unsigned bit = 1; N; N /= 10, bit <<= 1)
    {
        if (N%10)
            result += bit;
    }
    return result;
}

int main()
{
    std::cout<<binary(1101);
    return 0;
}

 

سوال شده اسفند 25, 1392  بوسیله ی Mad (امتیاز 245)   10 35 47
دوباره تگ گذاری شد مرداد 28, 1393 بوسیله ی BlueBlade

1 پاسخ

+1 امتیاز
 
بهترین پاسخ

شما اول باید کدت رو به شکل بازگشتی بنویسی که میشه این :

unsigned binary(unsigned long N)
{
return N == 0 ? 0 :  2 * binary(N/10) + N%10 ;
}

بعد از  این که  کد رو نوشتی حالا راحت می تونی با Template زمان کامپایل این کار رو انجام بدی :

#include <iostream>

template <unsigned long N>
struct Binary
{
    enum{value =  Binary<N/10>::value *2 + N%10 };
};

template <>
struct Binary<0> //end
{
    enum { value=0};
};

int main()
{
    const unsigned number=Binary<1101>::value;
    std::cout<<number;
    return 0;
}

 

پاسخ داده شده اسفند 25, 1392 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
انتخاب شد اسفند 28, 1392 بوسیله ی Mad
...