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 kiç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, yve 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 tdeğerlere1000, 1000000, 1000000000, and 1000000000000karşılık gelir (bin, bir milyon, bir milyar ve bir trilyon).eSteno her zaman başka bir numaraya takip edeceknve temsil10^n. Sayısal kestirme bulunması için izin vermeniz gerekirnve daha önce mevcute. Örneğin, olarakkekdeğerlendirir1000*10^1000.Basitlik adına, eğer bir sayıda kısayol
evarsa, sadece bir kez kullanılacaktır.Bir stenodan önceki herhangi bir sayı ( stenografi dahil ) ile çarpılır. örneğin
120kkolarak 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ğine10sonucunu10^10. Başka bir örnek:2m2kdeğ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
2k12olarak değerlendirilecektir2*1000 + 12. Bunun istisnası, stenografiekullanıldığında, bu durumda aşağıdaki sayıya ( stenograflar dahil ) aşağıdakiegibi davranılırnve 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.2geçerli ve şu şekilde değerlendirilmelidir:3.5*1000000000 + 1.2 = 3500000001.2Bu 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?
2m2kgibi edebi sayılar için - belki "tamsayı" - Ayrıca Kural 3. tartışılması eklenmelidir, farklı bir terimi kullanmak için iyi olabilir 123o Var değil kestirme. "Sayı" kelimesinin, şu anda olduğu gibi, burada yaklaşık 3 farklı tanımı vardır.