#include "stdafx.h"
#include <locale.h>
#include <stdio.h>
#include <string.h>
#include <windows.h>
int k,i;
template <class T>
void swap(T&a,T&b)//для разных типов
{
T tmp=a;
a=b;
b=tmp;
}
//int kolvo(char *x) //считает колво чисел в строке
//{
// k=0;
// while(x[k++]!='\0');
// k=k-1;
// return k;
//}
int chusla(char x)//распознает числа
{
if (x<='9')
return x-'0';
else
if((x<'a'))
return x-'A'+10;
else
return x-'a'+10;
}
int proverka(char *x,int a) // для того, чтобы число вводилось корректно
{
for(i=0;i<=strlen(x)-1;i++)
{
// printf("\n %d", chusla(x[i]));
if((chusla(x[i])>=a)||(x[i]<'0')||((x[i]>'9')&&(x[i]<'A'))||((x[i]>'Z')&&(x[i]<'a'))||(x[i]>'z')) return 1;
}
return 0;
}
int intoDec(char *x, int a)//переводит изначально заданное число в десятичную систему счисления
{
int sum=0;
int st=1;
for (int i=strlen(x)-1;i >=0;i--)
{
sum+=chusla(x[i])*st;
st*=a;
}
return sum;
}
void Conv(char *x, int a,int b)//конвентирует в желаемую систему
{
int sum=intoDec(x,a);
int i=0;
do
{
int h=sum%b;
sum=(sum-h)/b;
if (h>9)
x[i]=h+'A'-10;
else
x[i]=h+'0';
i++;
}
while( sum!=0 );
x[i]='\0';
for(i=0;i<int((strlen(x))/2);i++)
{
swap(x[i],x[strlen(x)-1-i]);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL,"rus");
int a,b;
char x[255];
int z = 1;
while(z==1)
{ system("cls");
printf("Введите исходную систему счисления: \n");
scanf("%i",&a);
printf("\nВведите число в исходной системе счисления: \n");
scanf("%s",&x);
while(proverka(x,a)==1)
{
printf("Число введено неправильно!!! \n Попробуйте еще раз:");
scanf("%s",&x);
printf("\n");
}
printf("\nВведите желаемую систему счисления: \n");
scanf("%i",&b);
printf("\n");
while(b<2)
{
printf("Некорректно ввели систему счисления\nПовторите:\n");
scanf("%i",&b);
printf("\n");
}
Conv(x,a,b);
printf("Конечное число равно:\n%s\n",&x);
printf("Для повтора нажмите 1, для выхода 0\n");
scanf("%i",&z);
}
return 0;
}