結果

問題 No.858 わり算
ユーザー NoneNone
提出日時 2021-03-01 06:02:05
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 39 ms / 2,000 ms
コード長 6,132 bytes
コンパイル時間 160 ms
コンパイル使用メモリ 82,380 KB
実行使用メモリ 55,604 KB
最終ジャッジ日時 2024-04-14 03:34:14
合計ジャッジ時間 1,200 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ(β)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 38 ms
53,388 KB
testcase_01 AC 38 ms
55,604 KB
testcase_02 AC 37 ms
53,948 KB
testcase_03 AC 38 ms
53,536 KB
testcase_04 AC 38 ms
54,600 KB
testcase_05 AC 37 ms
55,120 KB
testcase_06 AC 37 ms
54,228 KB
testcase_07 AC 39 ms
55,392 KB
testcase_08 AC 38 ms
53,864 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

def digit_shift(S, l):
    if '.' in S:
        a, b = S.split('.')
        n = int(a + b) * 10 ** (l - len(b))
    else:
        n = int(S) * 10 ** l
    return n

def digit_shift_inv(N,l,digit):
    """
    10^-l 掛けた物を 有効数字=digit で返す
    """
    S=str(N)
    L=len(S)
    if l==0: return S
    elif L<=l:
        f="0"*(l-L)+S
        if len(f)>=digit: return "0."+f[:digit]
        else: return "0."+f+"0"*(digit-l)
    else:
        f=S[-l:]
        if len(f)>=digit: return S[:-l]+"."+f[:digit]
        else: return S[:-l]+"."+"0"*(digit-l)

def is_square(N):
    """
    N = a**2 + r
    If r==0, N is squared number.
    """
    a,r = 0,0
    for s in reversed(range(0,N.bit_length(),2)):
        t = N>>s&3
        r = r<<2|t
        c = a<<2|1
        b = r>=c
        if b: r -= c
        a = a<<1|b
    return (a,r)

class Digit:

    def __init__(self,x,precision=-1):
        """
        :param precision: 内部計算の有効小数点以下桁数
        """
        if precision==-1:
            self.l=default_precision
        else:
            self.l=precision
        self.M=10**self.l
        if type(x)==int:
            self.x=x*self.M
        else:
            self.x=digit_shift(x,self.l)

    def __eq__(self, other):
        if isinstance(other, Digit):
            return self.x==other.x
        else:
            return self.x==other*self.M

    def __ne__(self, other):
        if isinstance(other, Digit):
            return self.x!=other.x
        else:
            return self.x!=other*self.M

    def __lt__(self, other):
        if isinstance(other, Digit):
            return self.x<other.x
        else:
            return self.x<other*self.M

    def __le__(self, other):
        if isinstance(other, Digit):
            return self.x<=other.x
        else:
            return self.x<=other*self.M

    def __gt__(self,other):
        if isinstance(other, Digit):
            return self.x>other.x
        else:
            return self.x>other*self.M

    def __ge__(self,other):
        if isinstance(other, Digit):
            return self.x>=other.x
        else:
            return self.x>=other*self.M

    def __neg__(self):
        res=Digit(0,self.l)
        res.x=-self.x
        return res

    def __sub__(self, other):
        res=Digit(0,self.l)
        if isinstance(other, Digit):
            res.x=self.x-other.x
        else:
            res.x=self.x-other*self.M
        return res

    def __rsub__(self, other):
        res=Digit(0,self.l)
        if isinstance(other, Digit):
            res.x=other.x-self.x
        else:
            res.x=other*self.M-self.x
        return res

    def __add__(self, other):
        res=Digit(0,self.l)
        if isinstance(other, Digit):
            res.x=self.x+other.x
        else:
            res.x=self.x+other*self.M
        return res

    def __radd__(self, other):
        res=Digit(0,self.l)
        if isinstance(other, Digit):
            res.x=other.x+self.x
        else:
            res.x=other*self.M+self.x
        return res

    def __mul__(self, other):
        res=Digit(0,self.l)
        if isinstance(other, Digit):
            res.x=self.x*other.x//self.M
        else:
            res.x=self.x*other
        return res

    def __rmul__(self, other):
        res=Digit(0,self.l)
        if isinstance(other, Digit):
            res.x=other.x*self.x//self.M
        else:
            res.x=other*self.x
        return res

    def __truediv__(self, other):
        res=Digit(0,self.l)
        if isinstance(other, Digit):
            res.x=self.x*self.M//other.x
        else:
            res.x=self.x//other
        return res

    def __rtruediv__(self, other):
        res=Digit(0,self.l)
        if isinstance(other, Digit):
            res.x=other.x*self.M//self.x
        else:
            res.x=other*self.M*self.M//self.x
        return res

    def __pow__(self,power):
        res=Digit(0,self.l)
        p=self.M
        m=self.x
        while power>0:
            if power&1:
                p*=m
                p//=self.M
            m*=m
            m//=self.M
            power>>=1
        res.x=p
        return res

    def __iadd__(self, other):
        if isinstance(other, Digit):
            self.x+=other.x
        else:
            self.x+=other*self.M
        return self

    def __isub__(self, other):
        if isinstance(other, Digit):
            self.x-=other.x
        else:
            self.x-=other*self.M
        return self

    def __imul__(self, other):
        if isinstance(other, Digit):
            self.x*=other.x
            self.x//=self.M
        else:
            self.x*=other
        return self

    def __itruediv__(self, other):
        if isinstance(other, Digit):
            self.x*=self.M
            self.x//=other.x
        else:
            self.x//=other
        return self

    def __abs__(self):
        res=Digit(0,self.l)
        res.x=abs(self.x)
        return res

    def __hash__(self):
        return self.x

    def __int__(self):
        return self.x//self.M

    def __str__(self):
        return digit_shift_inv(self.x,self.l,self.l)

    def __format__(self, spec):
        """ "{:6}".format(self) = 小数点以下6桁 """
        if spec:
            return digit_shift_inv(self.x,self.l,int(spec))
        else: digit_shift_inv(self.x,self.l,self.l)

    def __floor__(self):
        return self.x//self.M

    def __ceil__(self):
        return (self.x-1)//self.M+1

    def sqrt(self):
        res=Digit(0,self.l)
        a,r=is_square(self.x*self.M)
        res.x=a
        return res

    def is_integer(self):
        return self.x%self.M==0

###############################################
def example():
    global input
    example = iter(
        """
3.1 2
        """
            .strip().split("\n"))
    input = lambda: next(example)


###############################################
import sys
input = sys.stdin.readline
from math import floor,ceil


# example()


default_precision=100    # デフォルト小数点以下桁数は 10
X,Y=map(Digit, input().split())

print("{:50}".format(X/Y))
0