标题:如何求该代数式的值?
只看楼主
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
得分:0 
将int去掉,将 “/”号 换成 “\”号,代码更简洁。

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-09-18 13:06
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
?难道我会错意了。根据条件,num1到num4每位最小值为1,i值不可能小于16276的。当然不是恒定4位25进制数,也能做,下面代码可直接返回楼主所需的五笔字符串。
Function wbchar(n As Long) As String
  Dim i As Long, j As Long, k As Long, a As String
  If n > 406900 Or n < 1 Then Exit Function
  j = 16276
  k = 4
  If n < 16276 Then j = 651: k = 3
  If n < 651 Then j = 26: k = 2
  If n < 26 Then j = 1: k = 1
  n = n - j
  For i = 1 To k
    a = Chr((n Mod 25) + 65) & a
    n = Int(n / 25)
  Next
  wbchar = a
End Function
调用方法:
msgbox wbchar(1)  弹出“A”
msgbox wbchar(25)  弹出“Y”
msgbox wbchar(26)  弹出“AA”
msgbox wbchar(390624)  弹出“XXXX”
msgbox wbchar(406900)  弹出“YYYY”
这题按照楼主想要的结果还可以直接对"A-Z"做四次全排列,分别是“25排1”“25排2”“25排3”“25排4”

该函数在excel vba中调试成功。




[此贴子已经被作者于2022-9-18 16:31编辑过]


能编个毛线衣吗?
2022-09-18 16:22
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
得分:0 
回复 12楼 wmf2014
我用的是这个,你这个代码比较难理解。

程序代码:
Function GetStr(Num)
Select Case Num
Case 1: GetStr = "A"
Case 2: GetStr = "B"
Case 3: GetStr = "C"
Case 4: GetStr = "D"
Case 5: GetStr = "E"
Case 6: GetStr = "F"
Case 7: GetStr = "G"
Case 8: GetStr = "H"
Case 9: GetStr = "I"
Case 10: GetStr = "J"
Case 11: GetStr = "K"
Case 12: GetStr = "L"
Case 13: GetStr = "M"
Case 14: GetStr = "N"
Case 15: GetStr = "O"
Case 16: GetStr = "P"
Case 17: GetStr = "Q"
Case 18: GetStr = "R"
Case 19: GetStr = "S"
Case 20: GetStr = "T"
Case 21: GetStr = "U"
Case 22: GetStr = "V"
Case 23: GetStr = "W"
Case 24: GetStr = "X"
Case 25: GetStr = "Y"
End Select
End Function

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-09-18 16:32
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
得分:0 


[此贴子已经被作者于2022-9-18 22:52编辑过]


心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-09-18 22:43
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
wmf2014 的代码,按你要求的变量改了下。应该能看懂了。
程序代码:
Dim num1 As Long, num2 As Long
Dim num3 As Long, num4 As Long
Dim i As Long, j As Long, k As Long

i = Val(Text1.Text)

  If i > 406900 Or i < 1 Then Exit Sub  '超范围
  j = 16276             '默认减值 1+1*25+1*25*25+1*25*25*25
  k = 4                                 '默认有4个值
  If i < 16276 Then j = 651: k = 3  '如果小于 1+1*25+1*25*25+1*25*25*25,只有3个值
  If i < 651 Then j = 26: k = 2     '如果小于 1+1*25+1*25*25,只有2个值
  If i < 26 Then j = 1: k = 1       '如果小于 1+1*25 ,只有1个值
  i = i - j
  
  'wmf2014 写成了循环,因你要求单变量输出,只能改为4组命令
  
  num1 = i Mod 25 + 1     '取最低位
  i = i \ 25              '移位
  If k > 1 Then           '如果还有更多的位
    num2 = i Mod 25 + 1     '同上取最低位,移位
    i = i \ 25
  End If
  If k > 2 Then
    num3 = i Mod 25 + 1
    i = i \ 25
  End If
  If k > 3 Then
    num4 = i Mod 25 + 1
    i = i \ 25
  End If

Label1.Caption = num1
Label2.Caption = num2
Label3.Caption = num3
Label4.Caption = num4

Label5.Caption = num1 & " + " & num2 & " * 25 + " & num3 & " * 25 * 25 + " & num4 & " * 25 * 25 * 25 "

授人于鱼,不如授人于渔
早已停用QQ了
2022-09-18 23:16
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
GetStr
你可以定义为一个数组吗?
然后根据下标直接取数,不更快吗?
wmf2014 的代码是直接使用 chr 函数生成字符,不需要再查表,这也是一个办法。


授人于鱼,不如授人于渔
早已停用QQ了
2022-09-18 23:19
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
得分:0 
回复 15楼 风吹过b
她这种还要减去16276,猛一看莫名奇妙。B的算法OK,更符合题目要求。

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-09-19 00:38
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
得分:0 
chr(65) - chr(89) 就是 A -Y

代码中 1-25 是 A-Y

那么

Debug.Print chr(num1+64) & chr(num2+64) & chr(num3+64) & chr(num4+64)

是不是比wmf2014还要简单。

这里也要考虑一下值为0和1的情况。


---------------------------------------
现在看来,方法有好几种
可以出好几种代码
最终结果都是一样的。

[此贴子已经被作者于2022-9-19 00:57编辑过]


心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-09-19 00:49
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
dim GetStr(25) as string
GetStr(0)=""
for i=1 to 25
GetStr(i)=chr(64+i)
next i

---------------
调用时
debug.print getstr(num1) & getstr(num2) & getstr(num3) & getstr(num4)
不用管0,因为0会直接是空串,所以0 不影响。


授人于鱼,不如授人于渔
早已停用QQ了
2022-09-19 09:47
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
得分:0 
这样也可以的

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-09-19 20:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-510070-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025697 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved