首页 > 其他分享 >POJ 2390 (小数高精度乘法)

POJ 2390 (小数高精度乘法)

时间:2022-10-25 12:38:10浏览次数:53  
标签:begin end doc arr len longint POJ 2390 小数


小数高精度乘法


m*(1+r/100)^y


Program P2390;
const
maxn=40000;
F=10;
type
arr=record
d:array[1..maxn] of longint;
len,doc:longint;
end;
var
r,m:arr;
y:longint;
i:longint;
a,b:arr;
function max(a,b:longint):longint;
begin
if a<b then exit(b) else exit(a);
end;
procedure multipy(a,b:arr;var c:arr);
var
i,j,len:longint;
begin
fillchar(c,sizeof(c),0);
c.len:=a.len+b.len;

for i:=1 to a.len do
for j:=1 to b.len do
begin
inc(c.d[i+j-1],a.d[i]*b.d[j]);
inc(c.d[i+j],c.d[i+j-1] div F);
c.d[i+j-1]:=c.d[i+j-1] mod F;
end;
while (c.d[c.len]=0) and (c.len>1) do dec(c.len);
c.doc:=a.doc+b.doc;


end;
procedure to_arr(doc:longint;var c:arr);
var
x,i,n:longint;
begin
read(x);
i:=0;
while (x>0) do
begin
inc(i);
c.d[i]:=x mod F;
x:=x div F;
end;
c.len:=i;
c.doc:=doc;
end;
Procedure jie(a:arr;x:longint;var c:arr);
begin
if x=1 then begin c:=a; exit; end;
fillchar(c,sizeof(c),0);
if (x mod 2=0) then
begin
jie(a,x div 2,c);
multipy(c,c,c);
end
else
begin
jie(a,x div 2,c);
multipy(c,c,c);
multipy(a,c,c);
end;
end;
begin
to_arr(2,r);
r.len:=3;r.d[3]:=1;
to_arr(0,m);
read(y);
jie(r,y,r);
multipy(m,r,m);


for i:=m.len downto m.doc+1 do write(m.d[i]);
writeln;

end.



标签:begin,end,doc,arr,len,longint,POJ,2390,小数
From: https://blog.51cto.com/u_15724837/5794473

相关文章

  • POJ 3278(BFS-搜索范围)
    这题是BFS水的主要是范围0<=n,k<=100000 但是有可能搜到200000……半天功夫才A.programP3278;constmaxn=200000;varn,k,i,j:longint;q,deep:array[1..maxn]of......
  • POJ 3692(匈牙利算法)
    匈牙利算法:b[]保存当前找交错路P的各点是否已被连通,a[]表示某点之前的点本题的2分图是取最大团(各点互相连通),利用2分图性质,可看成补图的最大独立集(各点互不连通)……Program......
  • POJ 2184(01背包+滚动数组)
    01背包模板题Programdd;constmaxn=1000;maxv=100000;minv=-100000;NULL=-2139062144;varn,i,j,ans,p,np:longint;ts,tf:array[1..maxn]oflongint;......
  • POJ 1950(不打表做法)
    这题就是搜……注意设定maxn要不然肯定爆maxn=1*10^最大位数/21234..89-11121314这样的Programaa;constmaxn=1000000000000000;varn,t:longint;a:array[1..15]......
  • POJ 3256(SPFA)
    这题只能对每一个点查一遍……有向图的话能用floyd,可是迫于时限用了SPFA。Programaa;constmaxk=10000;maxn=10000;maxm=10000;vark,n,m,i,j,l:longint;a:ar......
  • POJ 2110(最小生成树)
    这题的思路就是找一个范围,看看这个范围是否可行主流是二分Ans,我是先把点排序,求最小生成树检查首位的ProgramP2110;typeed=recordu,v,w:longint;end;vara......
  • POJ 1951(空串特判)
    这题的教训是要特判空串ProgramP1951;vars:string;len,i,j:longint;b:array[0..10000]ofboolean;functionisdight(x:longint):boolean;beginif(x>=65)an......
  • POJ 1952(最长不下降子序列的个数)
    求一个序列的最长不下降子序列的长度,与个数(相同数列算1个)关键是如何判重。显然如果之前有一个尾数相同且长度相同的序列,哪么后一个包含前一个所有可能的序列相同的序列,故将......
  • POJ 2588(解析几何+并查集)
    题目就是早从左到右的路注意输入的实数这题图画好就行,别像我一开始把图弄反就成从上开始找,若找到一个与下边界相邻的就无解,找到与左边相邻的记圆与左边界相交的下边的点(相当......
  • POJ 3844(同余)
    果断同余……D[j]-D[i] mod k=0D[j]=D[i]求有多少相等数对,用队列O(n)ProgramP3844;constmaxn=50000;maxd=1000000;varans,t,f,n,i,j:longint;d:array[0........