一.简单题目
1. 高精度加法 (1)数组法 procedure add;
var a,b,s:array[1..10000] of longint; i,j:longint;
end; end; j:=l1;
if a[j]=0 then dec(j);
for i:=0 to j do s:=chr(a[i]+ord('0'))+s; begin
for i:=1 to 10000 do begin
s[i]:=s[i]+a[i]+b[i]; if s[i]>9 then begin
s[i+1]:=s[i+1]+s[i] div 10; s[i]:=s[i] div 10;炸成林 end; end;
j:=10000;
while (s[j]=0) and(j>1) do dec(j); for i:=j downto 1 do write(s[i]); end;
(2)字符串法
procedure add(s1,s2:string); var l1,l2:longint; i,j:longint;
a:array[0..10000] of longint; s:string; x:longint; begin s:=''; l1:=length(s1); l2:=length(s2);
if l1>l2 then for i:=1 to l1-l2 do s2:='0'+s2 else if l2>l1 then for i:=1 to l2-l1 do s1:='0'+s1;
l1:=length(s1);
for i:=l1 downto 1 do begin
x:=ord(s1[i])-ord('0')+ord(s2[i])-ord('0'); a[l1-i]:=a[l1-i]+x; if a[l1-i]>9 then begin
a[l1-i+1]:=a[l1-i+1]+a[l1-i] div 10; a[l1-i]:=a[l1-i] mod 10;
writeln(s); end;
2. 高精度乘法 (1)数组法
procedure multiply; var i,j,k:longint;
a,b,s:array[1..1001] of longint; begin
for j:=1 to 100 do begin k:=j; for i:=1 to 100 do begin
s[k]:=s[k]+a[j]*b[i]; s[k+1]:=s[k+1]+s[k] div 10; s[k]:=s[k] mod 10; inc(k); end; end; j:=1000;
while (s[j]=0) and(j>1) do dec(j); for i:=j downto 1 do write(s[i]); end;
(2)字符串法
procedure multiply(s1,s2:string); var i,j,k:longint; l1,l2:longint; t,x:longint; s:string;
a:array[0..1000] of longint; begin s:='';
l1:=length(s1); l2:=length(s2); if l1 >l2 then begin
t:=l1; l1:=l2; l2:=t;
1 / 8
整理笔记(复杂问题)
end;
for i:=l1 downto 1 do begin k:=l1-i; for j:=l2 downto 1 do begin
x:=(ord(s1[i])-ord('0'))*(ord(s2[j])-ord('0')); a[k]:=a[k]+x;
a[k+1]:=a[k+1]+a[k] div 10; a[k]:=a[k] mod 10; inc(k); end; end;
if a[l1+l2-1]=0 then k:=l1+l2-2 else k:=l1+l2-1;
for i:=0 to k do s:=chr(a[i]+ord('0'))+s; writeln(s); end;
3.混读字符串 var n:longint; i:longint;
name,mark:string; procedure inp; var s,s1:string; begin
readln(n);
for i:=1 to n do begin
readln(s); p:=pos(' ',s);
s1:=copy(s,1,p-1); name:=s1;
s1:=copy(s,p+1,length(s)); mark:=s1; end; end;
4. 进制转换(N进制-M进制)
const st:string[16]=('0123456789ABCDEF'); var s:string; n:longint;
a:array[1..100] of longint; procedure change;
var i,j:longint; l:longint; begin
readln(n,m); readln(s); l:=length(s); for i:=1 to l do begin
for j:=1 to 100 do a[j]:=a[j]*n; a[1]:=a[1]+pos(s[i],st)-1; for j:=2 to 100 do begin
a[j]:=a[j]+a[j-1] div m; a[j-1]:=a[j-1] mod m; end; end; j:=100;
while (a[j]=0) and(j>1) do dec(j); for i:=j downto 1 do write(a[i]); end;
5.求两数的最大公约数
function gcd(a,b:integer):integer; begin
if b=0 then gcd:=a
else gcd:=gcd (b,a mod b); end;
6.求两数的最小公倍数
function lcm(a,b:integer):integer; begin
if a< b then swap(a,B); lcm:=a;
while lcm mod b >0 do inc(lcm,a); end;
7. 素数
(1).小规模判断
function prime (n: integer): Boolean; var I: integer; begin
for I:=2 to trunc(sqrt(n)) do if n mod I=0 then begin prime:=false; exit;
2 / 8
整理笔记(复杂问题)
end;
prime:=true; end;
(2).判断longint范围内的数是否为素数(包begin t:=1;
while i<>0 do begin
含求50000以内的素数表): procedure getprime; var
i,j:longint;
p:array[1..50000] of boolean; begin
fillchar(p,sizeof(p),true); p[1]:=false; i:=2;
while i< 50000 do begin if p[i] then begin j:=i*2;
while j< 50000 do begin p[j]:=false; inc(j,i); end; end; inc(i); end; l:=0;
for i:=1 to 50000 do if p[i] then begin inc(l);pr[l]:=i; end;
end;{getprime(质数表)}
function prime(x:longint):integer; var i:integer; begin
prime:=false; for i:=1 to l do
if pr[i] >=x then break
else if x mod pr[i]=0 then exit; prime:=true;
end;{prime(判断)}
8.m的n次方 var n,m:longint;
procedure mn(i,s:longint); var t:longint;
if i mod 2=1 then t:=t*s; s:=s*s; i:=i div 2; end;
writeln(t); end; begin read(m,n); mn(n,m); end.
9.简单排序 (1).盲目排序 procedure sort; begin
Copyright © 2019- sceh.cn 版权所有 湘ICP备2023017654号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务