package systemy_liczbowe;
import java.util.Scanner;
import java.util.Vector;
public class Sysliczbowe {
Vector<String> porownanie = new Vector<String>();
private void zapeln()
{
porownanie.add("01");
porownanie.add("012");
porownanie.add("0123");
porownanie.add("01234");
porownanie.add("012345");
porownanie.add("0123456");
porownanie.add("01234567");
porownanie.add("012345678");
porownanie.add("0123456789");
porownanie.add("0123456789aA");
porownanie.add("0123456789aABb");
porownanie.add("0123456789AaBbCc");
porownanie.add("0123456789AabBCcDd");
porownanie.add("0123456789AaBbCcdDEe");
porownanie.add("0123456789aAbBcCdDdEeFf");
};
public Sysliczbowe(){
porownanie.add("01");
porownanie.add("012");
porownanie.add("0123");
porownanie.add("01234");
porownanie.add("012345");
porownanie.add("0123456");
porownanie.add("01234567");
porownanie.add("012345678");
porownanie.add("0123456789");
porownanie.add("0123456789aA");
porownanie.add("0123456789aABb");
porownanie.add("0123456789AaBbCc");
porownanie.add("0123456789AabBCcDd");
porownanie.add("0123456789AaBbCcdDEe");
porownanie.add("0123456789aAbBcCdDdEeFf");
}
//private boolean czy_zawiera(String message,String co_ma_zawierac)
//{
// bool odp =std::all_of(message.cbegin(),message.cend(),[&co_ma_zawierac](char c)
//{return co_ma_zawierac.find(c)!=std::string::npos; }
// );
// return odp;
//}
private String odw(String pomoc)
{
int rozmiar =pomoc.length();
String nowy=new String();
for(int i=0;i<rozmiar;++i)
{
// nowy.valueOf(pomoc.charAt(rozmiar-i-1));
nowy+=(pomoc.charAt(rozmiar-i-1));
}
return nowy;
};
String zmiana_systemu_liczbowego(int z,int na,String liczba)
{
// boolean czy_poprawne =czy_zawiera(liczba,porownanie[z-2]);
// if(czy_poprawne==false)
// {
// return "x7lm";
// }
if(z==na)
{
return liczba;
}
Vector<Integer> potegi_systemu=new Vector<Integer>();
for(int i=0;i<liczba.length();++i)
{// cout<<z<<" -<z "<<"na"<<i;
potegi_systemu.add((int)Math.round(Math.pow((double)z,(double)i)));
}
int do_obliczen=0;
int wynik=0;
String wsp;//ewentualnie String
for(int i=0,j=liczba.length()-1;j>=0;--j,++i)
{wsp=Character.toString(liczba.charAt(j));
//wsp=liczba.charAt(j);
if((wsp.equals('A'))||(wsp.equals('a')))
{
do_obliczen=10;
}
else if ((wsp.equals("B"))||(wsp.equals("b")))
{do_obliczen=11;
}
else if ((wsp.equals("C"))||(wsp.equals("c")))
{do_obliczen=12;
}
else if ((wsp.equals("D"))||(wsp.equals("d")))
{do_obliczen=13;
}
else if ((wsp.equals("E"))||(wsp.equals("e")))
{
do_obliczen=14;
}
else if ((wsp.equals("F"))||(wsp.equals("f")))
{
do_obliczen=15;
}
else{
do_obliczen = Integer.valueOf(wsp);
// do_obliczen=atoi(wsp.c_str());
}
int zm1=do_obliczen*potegi_systemu.get(i);
// wynik.add(((String.valueOf(do_obliczen*potegi_systemu.charAt(i))));
//String zm2=String.valueOf(zm1);
wynik=wynik+zm1;
}
if(na==10)
{
// ostringstream ss;
// ss<<wynik;
// std::string kokos;
// kokos=ss.str();
// return kokos;
String floatValue = String.valueOf(wynik);
return floatValue;
}
//ostringstream dodaj_liczbe;
String wynik_w_innym_systemie=new String();
int modulo_wynik;
int kopia_wynik_do_dzielenia=wynik;
while(kopia_wynik_do_dzielenia>0)
{
modulo_wynik=kopia_wynik_do_dzielenia%na;
switch(modulo_wynik)
{
case 10:
wynik_w_innym_systemie+="A";
break;
case 11:
wynik_w_innym_systemie+="B";
break;
case 12:
wynik_w_innym_systemie+="C";
break;
case 13:
wynik_w_innym_systemie+="D";
break;
case 14:
wynik_w_innym_systemie+="E";
break;
case 15:
wynik_w_innym_systemie+="F";
break;
default:
// dodaj_liczbe<<modulo_wynik;
// String wyt=modulo_wynik;
String wyt = String.valueOf(modulo_wynik);
// dodaj_liczbe.str( "" );
wynik_w_innym_systemie+=wyt;
break;
}
kopia_wynik_do_dzielenia=(kopia_wynik_do_dzielenia/na);
}
String nowy =odw(wynik_w_innym_systemie);
return nowy;
//tu odwrucony wynik
}
public static void main(String[] args)
{Sysliczbowe xc=new Sysliczbowe();
Scanner odczyt = new Scanner(System.in); //obiekt do odebrania danych od użytkownika
Scanner odczyt2 = new Scanner(System.in);
// imie = odczyt.nextLine();
// zapeln();
while(true)
{
System.out.println("Podaj system wejściowy \n "); //wyświetlamy powitanie
int system_wejsciowy;
system_wejsciowy=odczyt.nextInt();
System.out.println("Podaj system wyjsciowy \n ");
int system_wyj;
system_wyj=odczyt.nextInt();
System.out.println("Podaj liczbe \n ");
String lcz;
lcz=odczyt2.nextLine();
String wynik=xc.zmiana_systemu_liczbowego(system_wejsciowy,system_wyj,lcz);
if(wynik.equals("x7lm"))
{
System.out.println("ZLE DANE \n ");
}
else{
// cout<<"liczba "<<lcz<<" w systemie "<<system_wejsciowy<<" "<<"to liczba "<<wynik<<" w systemie "<<system_wyj<<std::endl;
System.out.println("liczba ");
System.out.println(lcz);
System.out.println(" w systemie ");
System.out.println(system_wejsciowy);
System.out.println(" to liczba ");
System.out.println(wynik);
System.out.println(" w systemie ");
System.out.println(system_wyj);
}
// odczyt.close();
// odczyt2.close();
}
}
}