标题:如何求该代数式的值?
只看楼主
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
结帖率:89.13%
 问题点数:0 回复次数:22 
如何求该代数式的值?
已知条件:
num1>=1 且 num1<=25
num2>=1 且 num2<=25
num3>=1 且 num3<=25
num4>=1 且 num4<=25

如果该等式成立:

i = num1 + num2 * 25 + num3 * 25 * 25 + num4 * 25 * 25 * 25

如何求:num1、num2、num3、num4的值?

PS:这个等式把我绕晕了,求解。
搜索更多相关主题的帖子: 代数式 条件 
2022-09-17 10:00
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
你把 I 作为一个 25 进位的值看不就是了。

num4=int(i/(25*25*25))
num3=int((i-num4*25*25*25)/(25*25))
num2=int((i-num4*25*25*25-num3*25*25)/25)
num1=i-num4*25*25*25-num3*25*25-num2*25
num1 或者写成
num1=i mod 25

授人于鱼,不如授人于渔
早已停用QQ了
2022-09-17 10:40
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
得分:0 
楼上代码有错误!!!!!!

就是25进制的计算问题

当 i=25时,应当num1=25才正确,这里结果却为num2=1

当i=406900时,num1 num2 num3 num4 应当都等于25才对,这里结果也不正确。

我算了一天,也没算出问题出在哪。

演算程序如下:

程序代码:
Private Sub Form_Load()

'公式:i = num1 + num2 * 25 + num3 * 25 * 25 + num4 * 25 * 25 * 25

Dim i As Long
i = 25
num4 = Int(i / (25 * 25 * 25))
num3 = Int((i - num4 * 25 * 25 * 25) / (25 * 25))
num2 = Int((i - num4 * 25 * 25 * 25 - num3 * 25 * 25) / 25)
num1 = i - num4 * 25 * 25 * 25 - num3 * 25 * 25 - num2 * 25
'num1 或者写成
'num1 = i Mod 25
Debug.Print num1 & " " & num2 & " " & num3 & " " & num4
End Sub


[此贴子已经被作者于2022-9-17 13:58编辑过]


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

此题作废

重新设计算法。

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-09-17 14:36
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
这题先要从数学上下手。
从题意可知,25进制没有问题,但25进制的数是0-24,所以要用25进制解题则先要对式子进行展开:
由于所有数据是从1到25,所以可以理解为是25进制的各位数加1,
即num1=n1+1,num2=n2+1,num3=n3+1,num4=n4+1
由此可得出num1+num2*25+num3*25*25+num4*25*25*25=(n1+1)+(n2+1)*25+(n3+1)*25*25+(n4+1)*25*25*25
将后面的式子展开n1+n2*25+n3*25*25+n4*25*25*25+1+25+625+15625=n1+n2*25+n3*25*25+n4*25*25*25+16276
n1+n2*25+n3*25*25+n4*25*25*25才是真正的25进制数,所以你的最终i值必须先减去16276,最后再依据你的3楼算法得到n1至n4的值,再对n1到n4分别加1,就是num1到num4的值。
406900-16276=390624
390624 mod 25=24 n1
int(390624/25) mod 25=24 n2
...

能编个毛线衣吗?
2022-09-17 20:45
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
得分:0 
代码写出来后,当i的值为 1、25、26、390624、406900时,会发现结果总是会出问题,悲哀!

当i等于以上值时,只有部分结果是正确的。

[此贴子已经被作者于2022-9-17 21:20编辑过]


心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-09-17 21:04
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
2 楼算法中能算核心算法。
修正很简单的啊。要么计算前修正
要么计算后修正。

计算后修正:从 num1 判断起,如果 为 0 ,那么从前面一位借1位来,手动写一个借位减法就是了。

那个核心算法是我在 excel 里用公式简单验算了一下而以。

--------------------------------------------
0 + 0 * 25 + 0 * 25 * 25 + 0 * 25 * 25 *25 = 0
1 + 0 * 25 + 0 * 25 * 25 + 0 * 25 * 25 *25 = 1
25 + 0 * 25 + 0 * 25 * 25 + 0 * 25 * 25 *25 = 25
1 + 1 * 25 + 0 * 25 * 25 + 0 * 25 * 25 *25 = 26
24 + 24 * 25 + 24 * 25 * 25 + 24 * 25 * 25 *25 = 390624
25 + 25 * 25 + 25 * 25 * 25 + 25 * 25 * 25 *25 = 406900

程序代码:
Dim num1 As Long, num2 As Long
Dim num3 As Long, num4 As Long
Dim i As Long

i = Val(Text1.Text)
'If i <= 0 Then Exit Sub       '确保输入为正数

num4 = Int(i / (25 * 25 * 25))
num3 = Int((i - num4 * 25 * 25 * 25) / (25 * 25))
num2 = Int((i - num4 * 25 * 25 * 25 - num3 * 25 * 25) / 25)
num1 = i - num4 * 25 * 25 * 25 - num3 * 25 * 25 - num2 * 25
'num1 或者写成
'num1 = i Mod 25

If num1 = 0 Then   '如果=0,判断一下能不能借位
    If num2 > 0 Or num3 > 0 Or num4 > 0 Then
        num1 = 25               '能借位,进行借位处理
        num2 = num2 - 1
    End If
End If
If num2 < 1 Then        '如果=0 或 -1,需要借位
    If num3 > 0 Or num4 > 0 Then    '能借位,进行借位处理
        num2 = 25 + num2
        num3 = num3 - 1
    End If
End If
If num3 < 1 Then        '同上
    If num4 > 0 Then
        num3 = 25 + num3
        num4 = num4 - 1 
    End If
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 = " & i
Debug.Print Label5.Caption







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

收到的鲜花
  • yuma2022-09-18 13:03 送鲜花  10朵   附言:感谢无私提供代码!

授人于鱼,不如授人于渔
早已停用QQ了
2022-09-18 12:15
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
去掉 确保为正数代码后,
输入负数时,会导致 num4 出现负数,并且是一定。

24 + 24 * 25 + 24 * 25 * 25 + -1 * 25 * 25 *25 = -1
25 + 23 * 25 + 24 * 25 * 25 + -1 * 25 * 25 *25 = -25

当输入 值超过 406900 时,会导致 num4 超过 25 。这个也应该在 输入时检测一下。


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


授人于鱼,不如授人于渔
早已停用QQ了
2022-09-18 12:18
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
计算机里,一般是后修正,参考 BCD码 及对应的 指令 用法。

授人于鱼,不如授人于渔
早已停用QQ了
2022-09-18 12:41
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
得分:0 
回复 7楼 风吹过b
感谢B哥无私提供的代码。

此代码我是用来输出 WB 编码的所有组合的。

1-25分别对应A-Y的。

从i= 1 to 406900遍历下去,就是所有 WB 编码,准备用来做个字典用的。

所以i的值是不会取负数的。

使用此算法,遇到进位的问题,总是理不清头绪,得不到正确的结果。

后来想到了取余,但是那只是将十进制计算为25进制数。和项目期望的值不符。

走了很多弯路,都准备放弃了。

这代码提供的,我觉得又可以继续我的项目了

在此表示感谢。

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


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



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




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

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