2012-10-03 30 views
15

Temel dönüşümler yapan bir C++ programı yazmaya çalışıyorum. Taban 10 ile temel dönüşümler

ben 20.

2 ila tüm diğer tamsayı üsleri bir ondalık sayı dönüştürmek istediğiniz

var mıdır verimli ve kolay uygulanması baz dönüşümleri için algoritma?

+0

Numaraları bir diğerine dönüştürmenin yalnızca bir yolu vardır. Tam olarak sorun nedir? –

+0

"2 ila 20 arasındaki tüm diğer üsler" derken, 2 ile 20 arasındaki gerçek tamsayı bazlarını kastedeceğinizi mi tahmin edeceğim? Gerçek olmayan temeller ve tamsayı olmayan temeller yok mu? Bunlar daha zor. –

+0

Ayrıca, sorun nedir? Bize şimdiye kadar sahip olduğunuz kodu gösterin. –

cevap

23

Sorunun tam olarak nerede olduğunu anlamıyorum? Baz dönüşümü yapmak çok kolay ve gayet kolay: elinizdeki gibi yaparsınız.

  • bölme kalanı
  • tekrar bölünmesi tamsayı kısmı tersini sıfır
  • kalanlar ulaşmak
  • durdurma süreç aşağı sayısıbaz ile
  • yazma sipariş vermek baz

Örnek:

1025 (ondalık) tabanına 15:

1025/15 = 68 , remainder 5 
68 /15 = 4 , remainder 8 
4 /15 = 0 , remainder 4 

taban 15 numara 485

2
iki problem olabilir

:

  • den Ayrıştırma Bilgisayarın yerel tamsayı gösteriminin orijinal temeli (strtol bu konuda oldukça iyidir).

  • Yeni tabana biçimlendirme. (itoa, bu konuda oldukça iyidir).

Kendiniz yazmak isterseniz, div function'u beğenebilirsiniz. Numarayı ve tabanı beslersiniz ve en sağdaki haneyi ayırır. Tüm rakamları almak için tekrarlayın.

Daha verimli olmak isterseniz, taban karesi ile bölünebilir ve aynı anda iki basamak alabilirsiniz (ASCII karakterlerini her iki basamak için de almak için bir arama tablosu kullanın). Here's an example of some very efficient implementations. Farklı bir taban kullanmak için değiştirilmesi zor olmaz.