千葉大学 融合理工学府 数学情報科学専攻 数学・情報数理学コース 2019年8月実施 専門 A5
标签:
Author
祭音Myyura (co-authored with GPT 6 Astra)
Description
Pascal の整数型の最大値を とし、次の型を用いる。
const MaxIndex = 999;
type bit = 0..1;
index = 0..MaxIndex;
bitseq = array[index] of bit;
とする。
(1) のときだけ真を返す function iszero(b: bitseq): boolean; を定義せよ。(2) とし、商を q、余りを返り値に格納する function divmod(b: bitseq; d: integer; var q: bitseq): integer; を定義せよ。(3) が3の倍数、または十進表示に3を含むときだけ真を返す function sna(b: bitseq): boolean; を定義せよ。上記関数や補助手続きを使用してよい。
题目描述
用长度为 的小端二进制数组表示非负大整数,普通整数上界为 。(1) 编写零判断。(2) 对小于普通整数上界一半的正除数,实现大整数除法,输出商和余数且不溢出。(3) 判断大整数是否为 的倍数或十进制表示含数字 。
Kai
(1)
function iszero(b: bitseq): boolean;
var i: integer; z: boolean;
begin
z := true;
for i := 0 to MaxIndex do
if b[i] <> 0 then z := false;
iszero := z
end;
(2) 上位桁から筆算を行う。
function divmod(b: bitseq; d: integer; var q: bitseq): integer;
var i, r, t: integer;
begin
r := 0;
for i := MaxIndex downto 0 do begin
t := 2*r + b[i];
q[i] := t div d;
r := t mod d
end;
divmod := r
end;
各段階で だから でオーバーフローしない。また なので商の桁は または 。処理済み接頭部について「接頭部の値 商の接頭部の値 」が保たれるため、終了時に正しい商と余りを得る。
(3)
function sna(b: bitseq): boolean;
var q: bitseq; r: integer; hit: boolean;
begin
r := divmod(b, 3, q);
hit := (r = 0);
while (not hit) and (not iszero(b)) do begin
r := divmod(b, 10, q);
if r = 3 then hit := true;
b := q
end;
sna := hit
end;
10で割った余りは最下位の十進桁であり、商で置き換えるたびに一桁取り除かれる。 は3の倍数なので最初の検査で真になる。