Bir kullanıcı dostu bir hesap makinesi yapmak isteyen bir şirket için çalışan ve böylece kullanıcıların ise "sayısal kestirme," gibi sayısal değerleri temsil harfleri kullanmak için yeteneği ekleyerek görevlendirilmiş durumda k
için 1000
. Şirketiniz söz konusu hesap makinelerinde depolama alanından tasarruf etmek istediğinden, depolama maliyetini azaltmak için kodunuzu mümkün olduğunca en aza indirmelisiniz.
Senin görevin
Bir ifadeyi STDIN'den girdi olarak okuyan veya parametre olarak alan ve değerlendirmesini döndüren ya da STDOUT'a yazdıran bir işlev oluşturmalısınız.
Bazı Açıklamalar
Bazı tanımlar yapmama izin verin. Öncelikle, ifade dediğim girdi var. Bu aşağıdaki gibi bir şey olabilir:
x + y / z
Bu ifade içinde üç numaraları: x
, y
ve z
, operatör (ayrılmış +
ve /
). Bu sayılar mutlaka pozitif tamsayılar (hatta tamsayılar) değildir. İşleri zorlaştıran şey, sayılardaki kısayolları değerlendirmemiz gerektiğidir. Örneğin,
2k15
: değerlendirmenin amaçları için, üç sayılar içine bu kadar bölünmüş 2
, 1000
(ki k
) ve 15
. Sonra, kurallara göre, onları elde etmek için birleştiririz.
2*1000 + 15 = 2015
Umarım bu, aşağıdaki kuralları anlamayı biraz kolaylaştırır.
kurallar
Not Aksi belirtilmedikçe, "numaralar" kelimesini veya eşanlamlılarını stenografi içerecek şekilde yorumlayabilirsiniz.
Aşağıdakiler işlev süreci gerekir sayısal kestirme teşkil:
k, m, b, t, and e
. sırasıylak, m, b, and t
değerlere1000, 1000000, 1000000000, and 1000000000000
karşılık gelir (bin, bir milyon, bir milyar ve bir trilyon).e
Steno her zaman başka bir numaraya takip edecekn
ve temsil10^n
. Sayısal kestirme bulunması için izin vermeniz gerekirn
ve daha önce mevcute
. Örneğin, olarakkek
değerlendirir1000*10^1000
.Basitlik adına, eğer bir sayıda kısayol
e
varsa, sadece bir kez kullanılacaktır.Bir stenodan önceki herhangi bir sayı ( stenografi dahil ) ile çarpılır. örneğin
120kk
olarak değerlendirilecektir120 * 1000 * 1000
. Öncesinde sayı yoksa, sayının 1 olduğunu varsaymalısınız (matematikte bir değişkeni nasılx
örtülü olarak ele alabileceğiniz gibi1x
). örneğine10
sonucunu10^10
. Başka bir örnek:2m2k
değerlendirir2*1000000*2*1000
(hiçbir şey eklenmez).Steno içeren bir sayıdaki son stenoyu takip eden herhangi bir sayı (stenografi uygulanmaz) eklenir. örneğin
2k12
olarak değerlendirilecektir2*1000 + 12
. Bunun istisnası, stenografie
kullanıldığında, bu durumda aşağıdaki sayıya ( stenograflar dahil ) aşağıdakie
gibi davranılırn
ve değerlendirilir10^n
(ilk kurala bakın).İşleviniz
+, -, *, and /
, sırasıyla toplama, çıkarma, çarpma ve bölme olan işleçleri işleyebilmelidir . Arzu ederseniz daha fazla işleyebilir.İşlemler işlem sırasına göre değerlendirilir .
Stenolardaki sayılar sadece tamsayılar değildir.
3.5b1.2
geçerli ve şu şekilde değerlendirilmelidir:3.5*1000000000 + 1.2 = 3500000001.2
Bu tür şeyler için varsa yerleşik yapılara izin verilmez. Ekleyeceğim istisna, diliniz otomatik olarak büyük sayıları bilimsel gösterime dönüştürürse, bu durumda çıktınız için kabul edilebilir.
Bayt cinsinden en kısa kod kazanır, standart boşluklar uygulanır.
Giriş
Girdi, her sayı ve operatörün boşluklarla ayrılmış bir ifadesi olacaktır. Sayılar stenografi içerebilir veya içermeyebilir. Bir örnek aşağıda gösterilmiştir:
10 + 1b - 2k
Çıktı
İşlevin ifadenin değerlendirmesini sayı olarak vermesi gerekir. Çıktı gösterilemeyecek kadar büyük olursa bilimsel gösterimin kullanılması kabul edilebilir. Sayı bir tamsayı değilse, en az üç ondalık basamağınız olmalıdır. Sayı bir tamsayı ise bu ondalık basamakları korumanız kabul edilebilir.
Test Durumları
Giriş
t
Çıktı
1000000000000
Giriş
1 + 4b / 10k11
Çıktı
399561.483
Giriş
e2 + k2ke-1 - b12
Çıktı
-999799912
veya
-999799912.000
Giriş
142ek12
Çıktı
142e1012
veya
142.000e1012
Giriş:
1.2m5.25
Çıktı:
1200005.25
Son Notlar
Bu benim ilk meydan okuma benim (sanal alandaki kullanıcıların bazı yardım ile). Net olmayan bir şey varsa, bunu bana bildirin ve açıklığa kavuşturmak için elimden geleni yapacağım.
1000 + 2000 * 10 ^ -1
, ama bu son bir cevap verdi -999998712
. (Ayrıca, yorumum kural 4'ün " son stenografi " ile jive gibi görünmüyor , ancak diziyi nasıl anlayacağımızdan emin değilim k2k
.) Değerlendirme adımlarını açıklayabilir misiniz?
2m2k
gibi edebi sayılar için - belki "tamsayı" - Ayrıca Kural 3. tartışılması eklenmelidir, farklı bir terimi kullanmak için iyi olabilir 123
o Var değil kestirme. "Sayı" kelimesinin, şu anda olduğu gibi, burada yaklaşık 3 farklı tanımı vardır.