Java 和 Python 返回不同的总和并尝试与 C++ 进行比较

Posted

技术标签:

【中文标题】Java 和 Python 返回不同的总和并尝试与 C++ 进行比较【英文标题】:Java and Python return different sums and trying to compare with C++ 【发布时间】:2017-05-09 12:59:45 【问题描述】:

为什么 Java 和 Python 从 1 到 100 万的总和给出不同的输出。我尝试了较小的数字,代码输出相同的结果,最多为 100 (5050)

Python

from datetime import datetime
start_time = datetime.now()

sum = 0
for i in range(1,1000000+1):
    #print(i)
    sum+=i
print(sum)

end_time = datetime.now()
print('Duration: '.format(end_time - start_time))

Java

package sum_1_to_1000;

public class sum 

    public static void main(String[] args) 
        // TODO Auto-generated method stub
        long startTime = System.currentTimeMillis();
        int sum = 0;
        for(int i = 1; i <= 1000000; i++)
            //System.out.println(i);
            sum+=i;
        
        System.out.println(sum);
        long endTime   = System.currentTimeMillis();
        long totalTime = endTime - startTime;
        System.out.println(Math.pow(totalTime*10, -3));
    


我尝试用 C++ 来做,但我仍在学习。如何让下面的代码运行,并打印出运行时间?有没有可以在线运行C++的地方?

#include <iostream>
using namespace std;

int main()
    int sum = 0;
    int i;
    for(i = 1; i <=2; i++)
        sum+=i;
    
    printf("The Sum is: ", sum);

【问题讨论】:

您是否考虑过每种语言的整数限制? Java 中的 int 被限制为 4 个字节,并且它是有符号的,因此它只能上升到 2^31-1。 Python ints 的范围更广。在 C++ 中,我相信它......取决于。 你的 C++ 代码没有被编译,因为 printf() 需要 stdio.h 并且你没有指定像 "%d" 这样的东西。 此外,由于您的代码是 C++,您可以使用 cout 进行输出 您可以尝试在 java 示例中使用 long 而不是 int,因为 khelwood 说您将在 sum integer 中溢出。 【参考方案1】:
for(int i = 1; i <= 1000000; i++)
            //System.out.println(i);
            sum+=i;

真正的sum=(1+1000000)*500000=500000500000,比Integer.MAX_VALUE (2^31-1)

【讨论】:

您应该找到 Python(和 C++)的 Integer.MAX_VALUE 等效项来完成此答案。 那么如何打印实数呢?我应该使用什么其他类型来代替 int? Integer.MAX_VALUE 在java中等于2147483647,可以用long在java中是8字节长度;在python2中有int和long,在Python 2中有sys.maxint =9223372036854775807(2^63 - 1);但是在 python3 中,只有 int ,在 Python 3 中 int 类型与 Python 2 中的 long 类型相同【参考方案2】:

我有朋友使用 repl.it https://repl.it/languages 有很多语言可供您选择使用。请记住,您是在其他人的服务器上运行它,所以要小心敏感信息

【讨论】:

【参考方案3】:

我过去也使用 CodeChef.com 在线编译代码。

【讨论】:

@molbdnilo 不,他只是回答了最后一个询问外部资源的问题“有地方可以在线运行 C++ 吗?”即使他不应该; ) (嗯,我想这就是它) 我试过 codecheff,c++14 可以,但 c++ 4.9.2 不行。有什么不同?如何打印执行时间?是否有另一个打印命令我单独打印变量,没有任何格式?和 Java 一样,Int 不返回整个值,除了 int 之外还有什么类型可以使用吗?

以上是关于Java 和 Python 返回不同的总和并尝试与 C++ 进行比较的主要内容,如果未能解决你的问题,请参考以下文章

使用动态编程从 Python 上的子集总和问题中获取所有子集

python excersice:列出总和

获取不同记录的总和并在两个日期范围之间进行比较

数据结构与算法之深入解析“组合总和”的求解思路与算法示例

如何根据分组变量计算所有列的总和并删除 NA

数据结构与算法之深入解析“组合总和Ⅳ”的求解思路与算法示例