题目描述
高精度乘单精度。a*b. a是一个很大的数,但不超过240位 b是一个整数不超过10000 求a*b
输入
两行数字, 第一行是a 第二行是b
输出
一行数字
样例输入
11111111111111111111111111111111111110
样例输出
1111111111111111111111111111111111110
我在上面发了很多次,都是运行错误,大家小心为妙。
1191: 【基础】高精度乘单精度 pascal问题
答案:2 悬赏:50 手机版
解决时间 2021-03-18 02:16
- 提问者网友:欲劫无渡
- 2021-03-17 11:27
最佳答案
- 五星知识达人网友:撞了怀
- 2021-03-17 11:59
var
a:array [0..250] of longint;
b:integer;
i,l:integer;
begin
readln(s);
read(b);
if (b=0) then
begin
writeln(0);
halt;
end;
while ((length(s)>1) and (s[1]<>'0')) do delete(s,1,1);
l:=length(s);
for i:=1 to l do a[l-i+1]:=(ord(s[i])-48)*b;
for i:=l downto 1 do
begin
a[i+1]:=a[i+1]+a[i] div 10;
a[i]:=a[i] mod 10;
end;
inc(l);
while (a[l]>9) do
begin
a[l+1]:=a[l] div 10;
a[l]:=a[l] mod 10;
end;
if (a[l]=0) then dec(l);
for i:=l downto 1 do write(a[l]);
end.
缩进是被百度吃掉的,注意乘0可以特判比较方便,a数组开成longint比较好,因为9*b是可能爆掉integer的,然后a数组给进位多开几位,其他就没什么了
a:array [0..250] of longint;
b:integer;
i,l:integer;
begin
readln(s);
read(b);
if (b=0) then
begin
writeln(0);
halt;
end;
while ((length(s)>1) and (s[1]<>'0')) do delete(s,1,1);
l:=length(s);
for i:=1 to l do a[l-i+1]:=(ord(s[i])-48)*b;
for i:=l downto 1 do
begin
a[i+1]:=a[i+1]+a[i] div 10;
a[i]:=a[i] mod 10;
end;
inc(l);
while (a[l]>9) do
begin
a[l+1]:=a[l] div 10;
a[l]:=a[l] mod 10;
end;
if (a[l]=0) then dec(l);
for i:=l downto 1 do write(a[l]);
end.
缩进是被百度吃掉的,注意乘0可以特判比较方便,a数组开成longint比较好,因为9*b是可能爆掉integer的,然后a数组给进位多开几位,其他就没什么了
全部回答
- 1楼网友:往事埋风中
- 2021-03-17 12:46
你好!
什么意思?
输入两行数字,
样例输入只有一行
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯