【发布时间】:2013-06-08 10:13:04
【问题描述】:
我必须编写计算大数(例如 200)的阶乘的程序。这对我来说非常重要。这是我的代码:
.text
main:
li $v0, 4
la $a0, prompt
syscall
li $v0, 5
syscall
move $s0, $v0
move $t1, $v0
li $t0, 1
loop:
mul $t0, $t0, $s0
addi $s0, $s0, -1
bgtz $s0, loop
li $v0, 1
move $a0, $t0
syscall
li $v0, 10
syscall
.data
prompt: .asciiz "\nGive a number: "
这个程序只适用于小于 31 的数字。我不知道如何解决它。有人可以帮助我吗?
P.S 对不起,我的语言不好。
【问题讨论】:
-
代码中的 petla 标签在哪里?
-
还有符号整数的限制是 2,147,483,647 或 2^31 - 1。您实际上遇到了整数溢出。尝试使用 24 作为输入,它也应该输出负数。
-
我知道,为什么大数字的结果不好,但我不知道如何解决它。你能解释一下你的最后一句话吗?
-
任何值
n >= 13的阶乘值都大于 32 位整数可以显示的值。