level 9
输入两个自然数,输出他们相乘后数的位数
输入:123 500
输出:5
2014年08月26日 04点08分
1
level 11
var a,b,ans:qword;
begin
readln(a,b);
if (a=0)or(b=0) then ans:=1
else ans:=trunc((ln(a)+ln(b))/ln(10)-0.0000001)+1;
writeln(ans);
end.
(错了求轻喷。。。)
如果读入的自然数比较大的话就记录下数的位数和前几位有效数字套用上面的程序就可以了
2014年08月26日 05点08分
2
谢谢啊,能给解释一下吗!
2014年08月26日 06点08分
回复 asd9129 :假设题目输入的是a和b,那么答案就是trunc((log10 a*b)-e)+1,由于Pascal中没有log10函数,所以需要用ln函数实现,那么根据换底公式,log10 a*b=ln(a*b)/ln(10)。而根据对数的定义ln(ab)=ln(a)+ln(b),那么这个程序的公式就出来了。
2014年08月26日 06点08分
回复 asd9129 :其中,e是个很小的实数,作用是避免实数误差和方便求出答案
2014年08月26日 06点08分
回复 abslime :注意到pascal当中恰好有log10函数,而且这个eps对于浮点数来说,似乎略大……
2014年08月26日 14点08分