Một số được gọi là số gần chính phương nếu tổng các chữ số của nó là số chính phương. hãy viết chương trình kiểm tra xem N có phải là số gần chính phương không vd SOGANCP.INP SOGANCP.OUT 3( số lượng) 13 YES 316 NO 306 YES giải giúp với ạ ko cần file

2 câu trả lời

uses crt;
var q,n,i:longint;

function cp(n:longint):boolean;
begin
    exit(sqrt(n) = trunc(sqrt(n)));
end;

function sumDigits(n:longint):boolean;
var i,sum:longint;
begin
    sum:=0;
    while(n > 0) do
        begin
            inc(sum, n mod 10);
            n:=n div 10;
        end;
    exit(cp(sum));
end;

procedure solve();
begin
    readln(n);
    if(sumDigits(n)) then writeln('YES') else writeln('NO');
end;

begin
clrscr;
    readln(q);
    for i:=q downto 1 do
        solve();
readln;
end.

uses crt;
var t, n:longint;

/// kiem tra so chinh phuong
function scp(n:longint):boolean;
begin
    exit( frac(sqrt(n)) = 0 );
end;

/// kiem tra xem n co gan chinh phuong khong
function gancp(n:longint):boolean;
var s:longint;
begin
    s:=0;
    while n <> 0 do
        begin
            inc(s,n mod 10);
            n:=n div 10;
        end;
    exit( scp(s) );
end;

begin
    clrscr;
    readln(t);
    while t > 0 do
        begin
            dec(t);
            readln(n);
            if (gancp(n)) then writeln('YES') else writeln('NO');
        end;
readln
end.