Nhị phân (Hệ thống định vị), chữ số
Giới hạn thuật toán nên gần đúng chỉ giao động từ 10^9 đến 10^12
Code:
#include <bits/stdc++.h>
#include <string>
#include <iostream>
using namespace std;
long long count(long long n)
{
long long j = 0;
while(n != 0)
{
long long t = n % 10;
j++;
n = n / 10;
}
return j;
}
long long He_2_convert_10(long long n)
{
long long k = count(n) - 1 , sum = 0;
long long i = k;
while(n != 0)
{
long long t = n % 10;
sum = sum + t*pow(2,k-i);
i--;
n = n / 10;
}
return sum;
}
void He_2_convert_8(long long n)
{
long long k = He_2_convert_10(n);
long long a[100000] , x = 0;
while(k != 0)
{
long long t = k % 8;
a[x++] = t;
k = k / 8;
}
for(int i = x-1 ; i >= 0 ; i--)
cout<<a[i];
}
void He_2_convert_16(long long n)
{
long long k = He_2_convert_10(n);
long long a[100000] , x = 0;
while(k != 0)
{
long long t = k % 16;
a[x++] = t;
k = k / 16;
}
char Array[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
for(int i = x-1 ; i >= 0 ; i--)
cout<<Array[a[i]];
}
void He_10_convert_2(long long n)
{
if(n > 0)
{
long long t = n % 2;
He_10_convert_2(n/2);
cout<<t;
}
}
long long Temp_10_to_2(long long n)
{
long long b[100000] , x = 0;
while(n != 0)
{
long long t = n % 2;
b[x++] = t;
n = n / 2;
}
long long sum = 0 , k = x - 1;
for(int i=k ; i >= 0 ; i--)
{
sum = sum + b[i]*pow(10,k);
k--;
}
return sum;
}
void He_10_convert_8(long long n)
{
long long k = Temp_10_to_2(n);
He_2_convert_8(k);
}
void He_10_convert_16(long long n)
{
long long a[100000] , x = 0;
while(n != 0)
{
long long t = n % 16;
a[x++] = t;
n = n / 16;
}
char Array[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
for(int i = x-1 ; i >= 0 ; i--)
cout<<Array[a[i]];
}
void He_8_convert_2(long long n)
{
long long k = count(n) - 1 , sum = 0;
long long i = k;
while(n != 0)
{
long long t = n % 10;
sum = sum + t*pow(8,k-i);
i--;
n = n / 10;
}
He_10_convert_2(sum);
}
long long He_8_convert_10(long long n)
{
long long k = count(n) - 1 , sum = 0;
long long i = k;
while(n != 0)
{
long long t = n % 10;
sum = sum + t*pow(8,k-i);
i--;
n = n / 10;
}
return sum;
}
void He_8_convert_16(long long n)
{
long long k = count(n) - 1 , sum = 0;
long long i = k;
while(n != 0)
{
long long t = n % 10;
sum = sum + t*pow(8,k-i);
i--;
n = n / 10;
}
He_10_convert_16(sum);
}
long long conver_A_from_Z_to_number(long long s)
{
if(s == 48) return 0;
if(s == 49) return 1;
if(s == 50) return 2;
if(s == 51) return 3;
if(s == 52) return 4;
if(s == 53) return 5;
if(s == 54) return 6;
if(s == 55) return 7;
if(s == 56) return 8;
if(s == 57) return 9;
if(s == 65) return 10;
if(s == 66) return 11;
if(s == 67) return 12;
if(s == 68) return 13;
if(s == 69) return 14;
if(s == 70) return 15;
}
long long count_number(long long n)
{
long long j=0;
while(n != 0)
{
long long t = n % 10;
j++;
n = n / 10;
}
return j;
}
long long convert_number(int a[],long long n)
{
long long sum = 0 , k = n - 1;
for(int i = 0 ; i < n ; i++)
{
sum = sum + a[i]*pow(10,k);
k--;
}
return sum;
}
void He_16_convert_2(char *s = new char[500])
{
int Temporary[100000],x=0;
for(int i = 0 ; i < strlen(s) ; i++)
Temporary[x++] = conver_A_from_Z_to_number((int)*(s+i));
for(int i = 0 ; i < x ; i++)
He_10_convert_2(Temporary[i]);
}
long long intermediary(long long n)
{
long long b[100000] , x = 0;
while(n != 0)
{
long long t = n % 2;
b[x++] = t;
n = n / 2;
}
long long sum = 0 , k = x - 1;
for(int i = x - 1 ; i >= 0 ; i--)
{
sum = sum + b[i]*pow(10,k);
k--;
}
return sum;
}
long long temp_16_to_2(char *s = new char[500])
{
int Temporary[100000],x=0,b[100000],z=0;
for(int i = 0 ; i < strlen(s) ; i++)
Temporary[x++] = conver_A_from_Z_to_number((int)*(s+i));
for(int i = 0 ; i < x ; i++)
b[z++] = intermediary(Temporary[i]);
long long sum = 0;
int c[100000],f;
for(int i = 0 ; i < z ; i++)
{
if(i != 0)
sum += count_number(b[i]);
}
long long number = 0;
for(int i = 0 ; i < z ; i++)
{
if(i == 0)
number += b[i]*pow(10,sum);
if(i > 0)
{
f = sum-count_number(b[i]);
number += b[i]*pow(10,f);
sum = f;
}
}
return number;
}
long long He_16_convert_10(char *s = new char[500])
{
long long k = temp_16_to_2(s);
return He_2_convert_10(k);
}
void He_16_convert_8(char *s = new char[500])
{
long long k = temp_16_to_2(s);
return He_2_convert_8(k);
}
int main()
{
cout<<"\t--------MODE--------";
cout<<"\n\t|1:Convert 10 to 2 |";
cout<<"\n\t|2:Convert 10 to 8 |";
cout<<"\n\t|3:Convert 10 to 16 |";
cout<<"\n\t|4:Convert 2 to 10 |";
cout<<"\n\t|5:Convert 2 to 8 |";
cout<<"\n\t|6:Convert 2 to 16 |";
cout<<"\n\t|7:Convert 8 to 2 |";
cout<<"\n\t|8:Convert 8 to 10 |";
cout<<"\n\t|9:Convert 8 to 16 |";
cout<<"\n\t|10:Convert 16 to 2 |";
cout<<"\n\t|11:Convert 16 to 8 |";
cout<<"\n\t|12:Convert 16 to 10|";
cout<<"\n\t|0::Exit |";
cout<<"\n\t|Choose ? |";
cout<<"\n\t____________________";
cout<<"\n\t >->->-End-<-<-<\n";
int choose;
do
{
cout<<endl;
cout<<"\nChoose:";
cin>>choose;
switch(choose)
{
case 0: break;
case 1:
{
int n;
cout<<"Number:";
cin>>n;
cout<<"Convert 10 to 2"<<endl;
cout<<n<<" --> ";
He_10_convert_2(n);
break;
}
case 2:
{
int n;
cout<<"Number:";
cin>>n;
cout<<"Convert 10 to 8"<<endl;
cout<<n<<" --> ";
He_10_convert_8(n);
break;
}
case 3:
{
int n;
cout<<"Number:";
cin>>n;
cout<<"Convert 10 to 16"<<endl;
cout<<n<<" --> ";
He_10_convert_16(n);
break;
}
case 4:
{
int n;
cout<<"Number:";
cin>>n;
cout<<"Convert 2 to 10"<<endl;
cout<<n<<" --> ";
cout<<He_2_convert_10(n);
break;
}
case 5:
{
int n;
cout<<"Number:";
cin>>n;
cout<<"Convert 2 to 8"<<endl;
cout<<n<<" --> ";
He_2_convert_8(n);
break;
}
case 6:
{
int n;
cout<<"Number:";
cin>>n;
cout<<"Convert 2 to 16"<<endl;
cout<<n<<" --> ";
He_2_convert_16(n);
break;
}
case 7:
{
int n;
cout<<"Number:";
cin>>n;
cout<<"Convert 8 to 2"<<endl;
cout<<n<<" --> ";
He_8_convert_2(n);
break;
}
case 8:
{
int n;
cout<<"Number:";
cin>>n;
cout<<"Convert 8 to 10"<<endl;
cout<<n<<" --> ";
cout<<He_8_convert_10(n);
break;
}
case 9:
{
int n;
cout<<"Number:";
cin>>n;
cout<<"Convert 8 to 16"<<endl;
cout<<n<<" --> ";
He_8_convert_16(n);
break;
}
case 10:
{
fflush(stdin);
cout<<"Input:";
char *s = new char[500];
gets(s);
cout<<"Convert 16 to 2"<<endl;
cout<<s<<" --> ";
He_16_convert_2(s);
break;
}
case 11:
{
fflush(stdin);
cout<<"Input:";
char *s = new char[500];
gets(s);
cout<<"Convert 16 to 8"<<endl;
cout<<s<<" --> ";
He_16_convert_8(s);
break;
}
case 12:
{
fflush(stdin);
cout<<"Input:";
char *s = new char[500];
gets(s);
cout<<"Convert 16 to 10"<<endl;
cout<<s<<" --> ";
cout<<He_16_convert_10(s);
break;
}
}
}
while(choose != 0);
return 0;
}