Заданы 2 значения натурального числа N(0<=N<=100000000), записанные в десятичной системе счисления с неизвестным основанием A(2<=A<=16). Написать программу на, которая определяет неизвестное основание системы счисления.

2

Ответы и объяснения

2013-12-04T11:08:07+00:00
Язык Python

A = 2197 # Число в 10 сс
B = "1000" # число в неизвестно сс, в данном случае 13-ная
for i in range(2, 17):
  try:
    if A == int(B, i): # команда int пытается прочитать строку B как число в сс i 
      print "Основание сс =", i
      break
  except:
    pass
else:
  print "Значения А и В не совпадают" # Если сс подобрать не вышло
Лучший Ответ!
2013-12-04T11:42:08+00:00

Это Проверенный ответ

×
Проверенные ответы содержат надёжную, заслуживающую доверия информацию, оценённую командой экспертов. На "Знаниях" вы найдёте миллионы ответов, правильность которых подтвердили активные участники сообщества, но Проверенные ответы - это лучшие из лучших.
Dim N As Long, M As Long, A As Integer
Dim strN1 As String, LngN1 As Long, i As Integer
Randomize
Print "Введите число N от 0 до 1 миллиарда: ";
Input N
A = Int(Rnd (1)*14) + 2 ' Случайно выбираем основание от 2 до 16
' Зашифровываем введенное число со случайным основанием
i = 0:  strN1 = ""
Do While N > 0
M =  N Mod A
If M = 10 Then
     strN1 = "A" &  Trim(strN1)
ElseIf M = 11 Then strN1 = "B" & Trim(strN1)  
ElseIf M = 12 Then strN1 = "C" & Trim(strN1)
ElseIf M = 13 Then strN1 = "D" & Trim(strN1) 
ElseIf M = 14 Then strN1 = "E" & Trim(strN1) 
ElseIf M = 15 Then strN1 = "F" & Trim(strN1)  
Else 
     strN1 = Trim(Str(M)) & Trim(strN1)
End If
N = Int (N / A)
i = i + 1
Loop
Print "Число N с неизвестным основанием А: " & strN1
' Зашифровали число, теперь подбираем неизвестное основание
LngN1 = 0
For A = 2 To 16
For i = 1 To Len(strN1)
M = Val (Mid (strN1,  Len(strN1) - i + 1, 1))
If Trim (Str (M)) = "A" Then
    LngN1 =  LngN1 + 10*A^(i-1)
ElseIf Trim (Str (M)) = "B" Then LngN1 = LngN1 + 11*A^(i-1) 
ElseIf Trim (Str (M)) = "C" Then LngN1 = LngN1 + 12*A^(i-1)  
ElseIf Trim (Str (M)) = "D" Then LngN1 = LngN1 + 13*A^(i-1)  
ElseIf Trim (Str (M)) = "E" Then LngN1 = LngN1 + 14*A^(i-1)  
ElseIf Trim (Str (M)) = "F" Then LngN1 = LngN1 + 15*A^(i-1)  
Else
    LngN1 =  LngN1 + M*A^(i-1) 
End If
Next i
If LngN1 = N Then Exit For
Next A
Print "Неизвестное основание А = " & A
End