Форум » Системы счисления » задание 14 №325 » Ответить

задание 14 №325

vin: //11·1565 + 18·1538 – 14·1517 + 19·1511 + 18338 var x,s: Biginteger; begin x:=11*Biginteger.Pow(15,65)+18*Biginteger.Pow(15,17)+19*Biginteger.Pow(15,11)+18338; while x>0 do begin s:=x mod 15 ;x:=x div 15; writeln(s) end; end. у меня получается 9 различных цифр, в ответе 10. Что не так

Ответов - 3

Поляков: Проверьте выражение для x.

vin: Спасибо, извините

s11kai: vin пишет: var x,s: Biginteger; begin x:=11*Biginteger.Pow(15,65)+18*Biginteger.Pow(15,17)+19*Biginteger.Pow(15,11)+18338; while x>0 do begin s:=x mod 15 ;x:=x div 15; writeln(s) end; end. А на питоне, данное решение, выглядит более понятно: [pre2] #14.325_с буквами # Автор: А.Л. Наймушин x = 11*15**65 + 18*15**38 - 14*15**17 + 19*15**11 + 18338 m = set() s = '' while (x != 0): s = str(x % 15) if s == '10': s = 'A' if s == '11': s = 'B' if s == '12': s = 'C' if s == '13': s = 'D' if s == '14': s = 'E' m.add(s) x = x // 15 print('n = ',len(m),';',' m = ', m ) [/pre2] Предложенный алгоритм можно упростить, например так: [pre2] m = set() a = ['A','B','C','D','E'] x = 11*15**65 + 18*15**38 - 14*15**17 + 19*15**11 + 18338 while x: if (x % 15)>9: m.add(str(a[x%15-10])) else: m.add(str(x%15)) x = x // 15 print('n = ',len(m),';',' m = ', m ) [/pre2] А если учесть, что отображать отдельные символы не требуется, то решение может быть еще проще и компактнее: [pre2] x = 11*15**65 + 18*15**38 - 14*15**17 + 19*15**11 + 18338 m = [15]*15 while x: m[x % 15] = x % 15 x = x // 15 print(15-m.count(15)) [/pre2]




полная версия страницы