数据结构 长数的代数运算
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/11/06 09:40:39
数据结构 长数的代数运算
(1)
设计数据结构完成长整数的表示和存储,并编写算法来实现两长整数的加、减、乘、除等基本代数运算.
(2) 课程设计目的
能够应用线性数据结构解决实际问题.
(3) 基本要求
① 长整数长度在一百位以上.
② 实现两长整数在同余代数下的加、减、乘、除操作.
即实现算法来求解a+b mod n,a-b mod n,a´b mod n,a¸b mod n.
③ 输入输出均在文件中.
④ 分析算法的时空复杂性.
(4) 实现提示
需将长整数的加法转化为多个一般整数加法的组合.
完成所有的功能
用C语言数据结构完成,如果正确可以提高悬赏 300分
(1)
设计数据结构完成长整数的表示和存储,并编写算法来实现两长整数的加、减、乘、除等基本代数运算.
(2) 课程设计目的
能够应用线性数据结构解决实际问题.
(3) 基本要求
① 长整数长度在一百位以上.
② 实现两长整数在同余代数下的加、减、乘、除操作.
即实现算法来求解a+b mod n,a-b mod n,a´b mod n,a¸b mod n.
③ 输入输出均在文件中.
④ 分析算法的时空复杂性.
(4) 实现提示
需将长整数的加法转化为多个一般整数加法的组合.
完成所有的功能
用C语言数据结构完成,如果正确可以提高悬赏 300分
参考资料:
Dim a(),b(),c() As Byte '定义输入和输出数组
Sub Main()
ts = "整数乘法"
xx = InputBox("请输入被乘数:",ts)
If xx = "" Then End
yy = InputBox("请输入乘数",ts)
If yy = "" Then End
a1 = Len(xx) '取xx的位数
b1 = Len(yy) '取yy的位数
c1 = a1 + b1 '确定结果的最大位数
ReDim a(a1),b(b1),c(c1) '重定义数组
For i = 1 To a
a(i) = Mid(xx,a1 - i + 1,1) '给数组a的每一位赋值
If Not IsNumeric(a(i)) Then '检查输入的合法性
MsgBox "被乘数输入错误",,ts
End
End If
Next i
For i = 1 To b1
b(i) = Mid(yy,b1 - i + 1,1) '给数组b的每一位赋值
If Not IsNumeric(b(i)) Then '检查输入的合法性
MsgBox "乘数输入错误",,ts
End
End If
Next i
For i = 1 To c1 '结果数组c初始化
c(i) = 0
Next i
For i = 1 To b1 '取b中的每一位
For j = 1 To a1 '取a中的每一位
c(j + i - 1) = c(j + i - 1) + b(i) * a(j) '相乘结果累加到c中的相应位
zz = c(j + i - 1)
k = 0
Do While zz >= 10 'c中的每一位进位检查
c(j + i + k - 1) = zz Mod 10 '本位处理
c(j + i + k) = c(j + i + k) + zz \ 10 '进位处理
zz = c(j + i + k)
k = k + 1
Loop
Next j
Next i
zz = ""
For k = c1 To 1 Step -1
If c(k) 0 Then Exit For '去掉结果中的前导0
Next k
k = IIf(k < 1,1,k)
For i = k To 1 Step -1
zz = zz + Trim(Str(c(i)))
Next i
zz = xx + " X " + yy + " = " + zz
ts = "计算结果:" + Str(a1) + "位 X " + Str(b1) + "位 结果为" + Str(k) + "位"
MsgBox zz,,ts '算式和结果输出
End
End Su
Dim a(),b(),c() As Byte '定义输入和输出数组
Sub Main()
ts = "整数乘法"
xx = InputBox("请输入被乘数:",ts)
If xx = "" Then End
yy = InputBox("请输入乘数",ts)
If yy = "" Then End
a1 = Len(xx) '取xx的位数
b1 = Len(yy) '取yy的位数
c1 = a1 + b1 '确定结果的最大位数
ReDim a(a1),b(b1),c(c1) '重定义数组
For i = 1 To a
a(i) = Mid(xx,a1 - i + 1,1) '给数组a的每一位赋值
If Not IsNumeric(a(i)) Then '检查输入的合法性
MsgBox "被乘数输入错误",,ts
End
End If
Next i
For i = 1 To b1
b(i) = Mid(yy,b1 - i + 1,1) '给数组b的每一位赋值
If Not IsNumeric(b(i)) Then '检查输入的合法性
MsgBox "乘数输入错误",,ts
End
End If
Next i
For i = 1 To c1 '结果数组c初始化
c(i) = 0
Next i
For i = 1 To b1 '取b中的每一位
For j = 1 To a1 '取a中的每一位
c(j + i - 1) = c(j + i - 1) + b(i) * a(j) '相乘结果累加到c中的相应位
zz = c(j + i - 1)
k = 0
Do While zz >= 10 'c中的每一位进位检查
c(j + i + k - 1) = zz Mod 10 '本位处理
c(j + i + k) = c(j + i + k) + zz \ 10 '进位处理
zz = c(j + i + k)
k = k + 1
Loop
Next j
Next i
zz = ""
For k = c1 To 1 Step -1
If c(k) 0 Then Exit For '去掉结果中的前导0
Next k
k = IIf(k < 1,1,k)
For i = k To 1 Step -1
zz = zz + Trim(Str(c(i)))
Next i
zz = xx + " X " + yy + " = " + zz
ts = "计算结果:" + Str(a1) + "位 X " + Str(b1) + "位 结果为" + Str(k) + "位"
MsgBox zz,,ts '算式和结果输出
End
End Su