Вывод делителей натурального числа - VBA
Формулировка задачи:
Листинг программы
- Sub Z4()
- A = InputBox("Введите натуральное число")
- If A <= 0 Then
- MsgBox ("Ошибка ввода данных")
- Exit Sub
- End If
- Count = 0
- For i = 1 To A
- If A / i - Int(A / i) = 0 Then
- Count = Count + 1
- End If
- Next i
- MsgBox ("Количество делителей - " & Count & vbCrLf)
- End Sub
Решение задачи: «Вывод делителей натурального числа»
textual
Листинг программы
- Option Explicit 'необходимость объявить все переменные
- Private Declare Function timeGetTime Lib "winmm.dll" () As Long 'Windows-таймер, 48 сут.
- Sub AI() 'вывод всех делителей натурального числа длиной до 15 цифр
- Dim i, j, t, Count, Count2, answer
- Static A
- A = InputBox("Введите a", "Ввод натурального числа", IIf(A = Empty, Year(Now), A))
- If IsNumeric(A) And A <= 0 Or A = Empty Then
- MsgBox ("Ошибка ввода: значение пусто либо не больше нуля.")
- Exit Sub
- End If
- If IsNumeric(A) Then ReDim arr(1 To Sqr(A)) Else Exit Sub
- t = timeGetTime
- For i = 1 To Sqr(A)
- ' If (a / i) = (a \ i) Then 'тоже работает, но на числах лишь до 2^31
- If Fix(A / i) = A / i Then
- Count = Count + 1
- arr(Count) = A / i
- End If
- Next i
- Count2 = Count 'далее счёт делителей числа a, меньших чем Sqr(a)
- For j = Count To 1 Step -1
- Count2 = Count2 + 1
- arr(Count2) = A / arr(j)
- Next j
- answer = _
- "Время выполнения: " & Format$((timeGetTime - t) / 1000, "0.000") & " секунды." _
- & vbCr & vbCr & "Количество натуральных делителей " & A & ": " & Count2 & vbCr & _
- vbCr & "Делители: " & Mid(Join(arr, "\"), 1, InStr(Join(arr, "\"), "\\"))
- MsgBox answer
- Debug.Print Join(Split(answer, "\"), Chr(13)) 'в случае если ответ не влез в MsgBox
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д