Форум » Системы счисления » Задание 316 » Ответить

Задание 316

ivackov.sergey: { 316) (П. Волгин) Значение выражения 8^20 + ((8^22 – 8^17) · (8^13 + 8^16)) записали в системе счисления с основанием 8. Затем в восьмеричной записи этого числа все цифры 7 заменили на 0, а цифры в разрядах 0, 1 и 2 удалили. Найдите сумму цифр восьмеричной записи числа после изменения. Ответ запишите в десятичной системе счисления. } //PascalABC.Net uses School; begin var a:BigInteger:=8; var b:BigInteger:=0; var sum:BigInteger:=0; var x:=a**20 + ((a**22 - a**17) * (a**13 + a**16)) ; while x<>0 do begin b:=x mod 8; case StrToInt(b.ToString) of 7,1,2,0 : b:=0; end; sum+=b; x:=x div 8; end; sum.print; У меня получается 6, а в ответах 8. Не могу понять, где ошибка?

Ответов - 7

ivackov.sergey: Ключева фраза "цифры в разрядах 0, 1 и 2 удалили" скорректировал в программе: [pre2] uses School; begin var a:BigInteger:=8; var b:BigInteger:=0; var sum:=0; var s:=''; var x:=a**20 + ((a**22 - a**17) * (a**13 + a**16)) ; while x<>0 do begin b:=x mod 8; if b = 7 then s:='0'+s else s:=b.ToString+s; x:=x div 8; end; s.Println; Delete(s,s.Length-3,3); s.println; x:=BigInteger.Parse(s); s:=x.ToString; s.Println; for var i:=1 to s.Length do sum+=s[ i].ToDigit; sum.Println; end. [/pre2] Теперь все корректно! Ответ 8.

OlgaChe1: [pre] s = 0 n = 8**20 + ((8**22 - 8**17)*(8**13+8**16)) n = n//8**3 # убираем 3 младших разряда, но можно этого и не делать - изанализа выражения очевидно, что в восьмеричном числе много младших нулевых разрядов, которые на сумму не влияют while n >0: if n%8 != 7: s += n%8 n//=8 print (s)[/pre]

ivackov.sergey: https://youtu.be/ADzhNn9jagQ


Карина: Здавствуйте, не получается получить в ответе 8, программа выдает 7. Помогите пожалуйста с решением. { 316) (П. Волгин) Значение выражения 8^20 + ((8^22 – 8^17) · (8^13 + 8^16)) записали в системе счисления с основанием 8. Затем в восьмеричной записи этого числа все цифры 7 заменили на 0, а цифры в разрядах 0, 1 и 2 удалили. Найдите сумму цифр восьмеричной записи числа после изменения. Ответ запишите в десятичной системе счисления. } n = 8**20 + ((8**22 - 8**17) * (8**13 + 8**16)) что выводит код n = oct(n)[2:] #100076777000000000100000000000000000000 n = n.replace('7', '0') #100006000000000000100000000000000000000 n = n[3:] #006000000000000100000000000000000000 print(sum(map(int, n))) #7

Поляков: Карина пишет: n = n[3:] Вы удалили старшие 3 разряда, а нужно младшие. Разряды в записи числа нумеруются справа налево.

Sofia: x = 8**20 + ((8**22 - 8**17) * (8**13 + 8**16)) x = abs(x) sm = 0 while x > 0: d = x % 8 if d == 7: d == 0 sm += 1 x //= 8 print(sm) как удалить разряды чисел? у меня ответ выводит 4..

Поляков: Sofia пишет: как удалить разряды чисел? Вам нужно удалить разряды 0, 1 и 2. Можно при суммировании просто считать их нулевыми.



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