#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int main ()
{
int sayi, taban1, taban2;
int r1, r2, i;
// Algoritma 2 - 10 arasındaki tabanlarda bulunan bir sayıyı, yine
// aynı aralıkda, başka bir tabandaki sayıya çeviriyor.
printf (" Sayi : ");
scanf ("%d", &sayi);
printf (" Taban : ");
scanf ("%d", &taban1);
printf (" Yeni taban : ");
scanf ("%d", &taban2);
r1 = i = 0;
// Sayı ilk olarak onluk tabana çevriliyor. (sayi % 10) bize
// sayinin son rakamini verir. while içerisinde sayı üzerinde
// sağdan sola doğru ilerleniyor ve ulaşılan her rakam uygun
// katsayıyla çarpılarak verilen sayı onluk tabana çevriliyor.
// Bu uygun katsayılar, örneğin 3 tabanı için 1, 3, 9, 27 ...
// şeklindedir.
while (sayi != 0)
{
r1 += (sayi % 10) * (int) pow (taban1, i);
sayi /= 10;
i ++;
}
i = 0;
// Aşağıdaki while ile yeni oluşacak sayının kaç basamaklı
// olduğu bilgisi elde ediliyor.
while (r1 > pow (taban2, i)) i ++;
printf (" Yeni sayi : ");
// Orjinal tabanından onluk tabana çevrilmiş sayı, artık yeni
// tabana çevrilmek için hazır. Yeni sayının soldan sağa doğru
// rakamları tek tek elde ediliyor.
while (i > 0)
{
r2 = r1 / (int) pow (taban2, i - 1);
r1 -= r2 * (int) pow (taban2, i - 1);
printf ("%d", r2);
i --;
}
printf ("\n\n");
return 0;
}