воскресенье, 5 октября 2014 г.

Перевод числа из двоичной системы счисления в десятичную

Как вы думаете - сколько способов написать программу перевода числа из двоичной системы счисления в десятичную? Скажу просто - сколько программистов, столько и способов.
Вот некоторые из них (на С++):
1 вариант
    unsigned long long s;
    int i;
    string a;
    cin>>a;
    s=0;
   for(i=0;i<s.size();i++)
    {
        if(s[i]=="1") s=(s<<1)+1;//сдвиг влево на 1 байт плюс 1
        else s=(s<<1);
    }
    cout << "s=" << s<<endl;

2 вариант
    unsigned long long s, a, b;
    int i=0;
    cin>>a;
    s=0;
    while (a>0)
     {
         b=a%10; //выделяем последнюю цифру
         if (b==1) s=s+pow(2,i);
         a=a/10;
         i=i+1;
      }
    cout << "s=" << s<<endl;

3 вариант:
    unsigned long long s;
    string a;
    int i;   
    cin>>a;
    s=0;
   for(i=0;i<a.size();i++)
    {
        if(a[i]=="1")  s=2*s+1; //формула Горнера
        else s:=2*s;
     } 
    cout << "s=" << s<<endl;

4 вариант
using namespace std;
string n;
int l,a,i,k;
    cin >> n;
    l=n.size();
   a=0;
   k=1;
   if (n[l]=='1')
        {a=a+k;}
    for (i=l-1;i>=0;--i)
    {
        if (n[i]=='1')
        {a=a+k;}
        k=k*2;
    }
    cout << a << endl;

5 вариант
using namespace std;
int a,b,n;
int p=1;
n=0;
  cin >> a;
 while (a>0)
 {
     b=a % 10;
     a=a/10;
     if(b==1)
     {
         n=n+p;
     }
     p=p*2;
 }
 cout <<n;


6  вариант
    long long int t,q,g,u,n,s;
    float a,b,c;
    cin >> s;
    u=0;
    n=0;
    g=s;
    q=0;
    while (g!=0)
    {
        g=g/10;
        ++q;
    }
    while (n<=q)
    {
        a=pow(10,n);
        t=a;
        a=s%t;
        t=10*a/t;
        b=pow(2,(n-1));
        u=t*b+u;
        ++n;
    }
    cout << u;

7 вариант
 int b,c,d,i;
 char a[100];
 cin >> a;
 d=0;
 c=strlen(a);
 for (int i=c;i>=1;i--)
 {
   if (a[i-1]=='1')  { d=d+pow(2,c-i);}
 }
 cout << d;

8 вариант
    char a[10];
    int l, mult=1, s=0;
    cin >> a;
    l=strlen(a);
    for (int i=l;i>=1;i--)
    {
      s=s+((a[i-1]=='1')?1:0)*mult;
      mult=mult*2;
    }
    cout << s;

Если вам мало - напишите свой!

Комментариев нет:

Отправить комментарий