在 TurboPascal7 中除以 0
Division by 0 in TurboPascal7
我正在做我的学校项目,我(几乎)对这个问题感到愤怒。我的解决方案的有效性是 95%,但我有 1 个输入错误 – 我不知道输入,但我知道,输入失败是因为错误代码 200,它被 0 除。
我的项目是这样的:
„The digit sum of an integer is defined to be the sum of the digits in the integer's written form. Usually we calculate the digit sum using a number's decimal (base 10) representation, but in this exercise we will compute it in a given base. Write a function that computes a natural number's digit sum when the number is written in a given base. Using this function, write a program that reads two natural numbers (each on its own line, and both in decimal representation): a base B and a number N. The output should be N's digit sum in base B (written in decimal representation).“
我已经尝试通过添加2个条件来解决问题,但没有任何效果,错误仍然存在。
我正在使用一个公式,可以在此处找到 https://en.wikipedia.org/wiki/Digit_sum 。
这是代码本身,并不长。
program CifernySoucetZobecneny;
var
Soustava, Cislo, i: longint;
HorniMez: longint;
Soucet: real;
function Mocnina(Zaklad: longint; Exponent: longint): longint;
var
i, Pomoc: longint;
begin
Pomoc := 1;
for i := 1 to Exponent do
begin
Pomoc := Pomoc * Zaklad;
end;
Mocnina := Pomoc;
end;
begin
readLn(Soustava);
readLn(Cislo);
if (Soustava = 0) then
begin
writeLn('0');
exit;
end;
if (Soustava = 1) then
begin
writeLn(Cislo);
exit;
end;
HorniMez := Trunc(Ln(Cislo)/Ln(Soustava));
Soucet := 0;
for i := 0 to HorniMez do
begin
Soucet := Soucet + ((1/Mocnina(Soustava, (i)))*((Cislo mod Mocnina(Soustava, (i+1))) - (Cislo mod Mocnina(Soustava, i))));
end;
writeLn(Soucet:0:0);
end.
如果有人可以查看代码并告诉我,我在哪里除以 0,我将不胜感激,因为我尝试了很多输入,在这上面花了很多时间,但没有得到正确的解决方案。谢谢大家
PS: 我是捷克人,所以变量和函数的名称不是英文的,很抱歉,但我希望这不会成为问题。
当Cislo = 0
时,Ln(Cislo)
的后续计算给出运行时错误200。这是因为Ln(0)
未定义(超出Ln()
的允许范围)。
我正在做我的学校项目,我(几乎)对这个问题感到愤怒。我的解决方案的有效性是 95%,但我有 1 个输入错误 – 我不知道输入,但我知道,输入失败是因为错误代码 200,它被 0 除。
我的项目是这样的:
„The digit sum of an integer is defined to be the sum of the digits in the integer's written form. Usually we calculate the digit sum using a number's decimal (base 10) representation, but in this exercise we will compute it in a given base. Write a function that computes a natural number's digit sum when the number is written in a given base. Using this function, write a program that reads two natural numbers (each on its own line, and both in decimal representation): a base B and a number N. The output should be N's digit sum in base B (written in decimal representation).“
我已经尝试通过添加2个条件来解决问题,但没有任何效果,错误仍然存在。 我正在使用一个公式,可以在此处找到 https://en.wikipedia.org/wiki/Digit_sum 。 这是代码本身,并不长。
program CifernySoucetZobecneny;
var
Soustava, Cislo, i: longint;
HorniMez: longint;
Soucet: real;
function Mocnina(Zaklad: longint; Exponent: longint): longint;
var
i, Pomoc: longint;
begin
Pomoc := 1;
for i := 1 to Exponent do
begin
Pomoc := Pomoc * Zaklad;
end;
Mocnina := Pomoc;
end;
begin
readLn(Soustava);
readLn(Cislo);
if (Soustava = 0) then
begin
writeLn('0');
exit;
end;
if (Soustava = 1) then
begin
writeLn(Cislo);
exit;
end;
HorniMez := Trunc(Ln(Cislo)/Ln(Soustava));
Soucet := 0;
for i := 0 to HorniMez do
begin
Soucet := Soucet + ((1/Mocnina(Soustava, (i)))*((Cislo mod Mocnina(Soustava, (i+1))) - (Cislo mod Mocnina(Soustava, i))));
end;
writeLn(Soucet:0:0);
end.
如果有人可以查看代码并告诉我,我在哪里除以 0,我将不胜感激,因为我尝试了很多输入,在这上面花了很多时间,但没有得到正确的解决方案。谢谢大家
PS: 我是捷克人,所以变量和函数的名称不是英文的,很抱歉,但我希望这不会成为问题。
当Cislo = 0
时,Ln(Cislo)
的后续计算给出运行时错误200。这是因为Ln(0)
未定义(超出Ln()
的允许范围)。