只是一个算法题当时着急晕呼啦!第2天就想起算法了~
求1/N的第M位!N,M分别为大于一的任意数~!大家想想,也许你们都知道~其实很简单~只是个算法~争取下回你们面试 遇到不会晕~
答案按正常算术 肯定不行~按除法的计算原理~ 哦啦提示到这~
求1/N的第M位!N,M分别为大于一的任意数~!大家想想,也许你们都知道~其实很简单~只是个算法~争取下回你们面试 遇到不会晕~
答案按正常算术 肯定不行~按除法的计算原理~ 哦啦提示到这~
M 和 N 就是题目里的M、N a = 1
for i = 1 To M - 1
a = (a * 10) mod N
next i
print int(a * 10 / N)
严重不明!!
什么叫做求1/N的第M位!???
什么叫做N,M分别为大于一的任意数~!??????
比如呢?
比如N=10 ,M=20
那么要求的是什么??1/N的第M位 就是 1/10 的第20位??啥意思???
M=M-1
msgbox ((10^M)\N) mod 10
严重不明!!
什么叫做求1/N的第M位!???
什么叫做N,M分别为大于一的任意数~!??????
比如呢?
比如N=10 ,M=20
那么要求的是什么??1/N的第M位 就是 1/10 的第20位??啥意思???
就是可以看到1/10的20位 例如,0.1000000000000000000000000000000000000000000000
1/9的第20位 0.1111111111111111111111111111111111111111111111111111111111111
你的明白!!
for i = 1 To M - 1
a = (a * 10) mod N
next i
print int(a * 10 / N)看不懂你的算法
例如 1/9的第20位
在你的一顿循环后 a 还是1啊!
你打印的整型还是0啊!
不对吧 !!!
M=M-1
msgbox ((10^M)\N) mod 10
例如1/9的20位
10的19次幂/9 在10的余数吗? 小弟太菜
有些看不懂啊!他不也纯在数据益处的问题吗? 你要看 500位呢???
Dim Temp As String
Temp = Trim(Str(1 / N))
If Len(Temp) < M Then MsgBox "没有值": Exit Sub
Debug.Print Mid(Temp, M, 1)
End Sub
Dim i As Integer
Dim geshu As Integer
Dim mintremain As Integer '余数
Dim bit As Integer '商
mintremain = 1 '分子为1
For i = 1 To M
geshu = countNum(mintremain, N) '求得要乘以10的个数
If M < (i - 1 + geshu) Then '如果当前i+getshu-1大于M的
cal = 0 '第M为0
Exit Function
Else '否则将将i+geshu-1,表示当前已到达i+geshu-1位
i = i + geshu - 1
End If
bit = Int(mintremain / N) '商
Debug.Print "第" & i & "位:" & bit
mintremain = mintremain Mod N '余数
If mintremain = 0 Then '如果被除断
MsgBox "N在第" & i & "位被除断!"
cal = 100
Exit Function
End If
Next i
cal = bit '返回商
End Function'countNum表示要乘多少个10才能使分子大于分母
Private Function countNum(mintremain As Integer, N As Integer) As Integer
Dim mintNum As Integer
Do While mintremain < N
mintremain = mintremain * 10
mintNum = mintNum + 1
Loop
countNum = mintNum
Exit Function
End FunctionPrivate Sub Command1_Click()
Me.Caption = Str(cal(Val(Text1.Text), Val(Text2.Text)))
End Sub
我有个自己写的不过在网吧没测试
dim k
dim j
dim l as string
dim a
k=1
j=len N'取得被除数的位数
for i=0 to j
k =k & "0"
next
'除法分步算 先提位去除
for i=0 to M
if i=0 then
a = k mod N ‘例如N=9 K=10 N为90 K 为100
else
a = a * 10 mod N'以后每次余数*10
end if
L = L & a'累加余数
next
magbox "0." & L
我在网吧没法测试!望指点错误!!
看得有些晕啊!
哈哈 大家都加油吧!还有什么好的算法 求教!!
------------------
a = 1
for i = 1 To M - 1
a = (a * 10) mod N
next i
print int(a * 10 / N)看不懂你的算法
例如 1/9的第20位
在你的一顿循环后 a 还是1啊!
你打印的整型还是0啊!
不对吧 !!!
----------------
hot1kang1(小许) 你先试一下我的代码再说吧,或者你没看清楚吧,唉……“在你的一顿循环后 a 还是1啊!”????你怎么看的啊???另外可以在for循环里加一个if语句,当a=0时跳出循环,这样遇到可以除尽的情况可以节约一点时间。
如:1/198778888888888888888888888888888888888888888888
的第8985458578642453453457867878位?
---------------------------- hiking()
考虑这个干嘛啊?我只保证在M、N不超出定义值范围的情况下,将结果算出来,你去考虑这个吧,你怎么解决?创造一个更NB的数据类型?是否应该先考虑一下电脑的计算能力呢?先去设计一台电脑吧
写一个:dim n as single
n=123456789
for i=1 to len(str(int(m)))
print 1/val(left(m,i))
next 应该不是这个意思!?
看不懂你的叙述!
反对的人在想什么呢
搞不懂,就这么简单的个问题,人家贴出来了还还说这说那
你有没有想过a乘以10之后,a仍然少于分母,比如,N=9999,a=1 ,a*10/n会是什么样的情况。
10/9999又会是多少呢?其它算法和大家都是一样的了,只不过多了一步,考虑了a要乘多少个以后才能大于分母.
我的代码最优不敢说,但绝对正确,你们有没有测试过自己的代码?
刚才试了一下,你的代码最优。
我是庸人自优,自己多考虑了。