首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(1e18+1) (1e18) /(1e18)的除法得到Python3.6中的(1e18)

问(1e18+1) (1e18) /(1e18)的除法得到Python3.6中的(1e18)
EN

Stack Overflow用户
提问于 2019-08-10 23:45:32
回答 1查看 281关注 0票数 1

下面是代码&对于输入n=(1e18+1)*(1e18)和k=(1e18),代码应该输出"YES“。但它会打印"NO“。这是因为'a‘的值是1e18。但理想情况下,'a‘应该是(1e18+1)。请帮帮忙。

代码语言:javascript
复制
    for t in range(int(input())):
        n,k=input().split()
        n=int(n)
        k=int(k)
        if n>=k*k:
            a=n/k
            print("a is {}".format(a))
            if a%k==0: 
                print ("a%k is {} ans {}".format(a%k, "NO"))
            else: 
                print("a%k is {} ans {}".format(a%k, "YES"))
        else:
            print("YES")

输入:

代码语言:javascript
复制
3
1 1
30 5
1000000000000000001000000000000000000 1000000000000000000

输出:

代码语言:javascript
复制
a is 1.0
a%k is 0.0 and ans is NO
a is 6.0
a%k is 1.0 and ans is YES
a is 1e+18
a%k is 0.0 and ans is NO
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-10 23:57:52

这里的问题是,你使用的是“正常”的/除法,它总是产生一个浮点数。由于浮点数的精度有限,因此1e18+1取整为1e18。

要解决这个问题,可以使用整数除法//,它可以得到一个整数。

通过更改此行:

代码语言:javascript
复制
a = n // k

您的代码可以正常工作,如以下示例输出所示:

代码语言:javascript
复制
1
1000000000000000001000000000000000000 1000000000000000000
a is 1000000000000000001
a%k is 1 ans YES
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57443552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档