Как вы думаете - сколько способов написать программу перевода числа из двоичной системы счисления в десятичную? Скажу просто - сколько программистов, столько и способов.
Вот некоторые из них (на С++):
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;
Если вам мало - напишите свой!
Вот некоторые из них (на С++):
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;
Если вам мало - напишите свой!
Комментариев нет:
Отправить комментарий