java与c++的效率比较
class Test
{
static int cout=0;
static int total=0;
static int sum=0;
public static void main(String[] args)
{
int n=20007;
go(n,1);
System.out.println(cout);
}
public static void go(int n,int top)
{
for(int i=top;i<=215;i++)
{
if(sum>n)return;
if(total>4)return;
if(sum==n){cout++;return;}
sum=sum+i*i;
total++;
go(n,i);
total--;
sum=sum-i*i;
}
}
}
#include <iostream>
using namespace std;
void go(int ,int);
int count=0;
int total=0;
int sum=0;
void main()
{
int n=20007;
go(n,1);
cout<<count;
}
void go(int n,int top)
{
for(int i=top;i<=215;i++)
{
if(sum>n)return;
if(total>4)return;
if(sum==n){count++;return;}
sum=sum+i*i;
total++;
go(n,i);
total--;
sum=sum-i*i;
}
}
这两个程序的算法是一样的,一个是用C++写的,一个用JAVA写的,哪个最先得到运算结果?一般的回答是:当然是用C++写的那个,但是事实是JAVA只花了大约10秒,而C++却花了大约36秒!!其中的原因是什么?!!
程序解决的问题是:拉格朗日第四定律问题
(Input File: lagrange.in; Output: Standard Output)
任何正整数都可以表示为最多不超过4个正整数的平方之和,这是众所周知的拉格朗日的Four-Square定理。这个定理首先由Joseph-Louis Lagrange在1770年证明。你的任务不是解释原初的证明,也不是发现新的证明,而是计数对某个数这个定理成立的表达式有多少种。
对一个给定的正整数n,你要报告将n表示为最多四个正整数平方和的不同表示的种数。注意,表达式中,加法的顺序是无关紧要的,即你必须把32 + 42与42 +32看作是同一种表示。例如,看25,这个数有三种表示:12+22+22+42,32 + 42, 与52,那么你就应该报告3。注意不要重复计数32 + 42与42 +32。
Input
输入最多有255行,每行是一个小于215的正整数,最后一行是一个0,表示输入的结束。
Output
输出也由多行组成,每行是单个整数。输出中没有其他字符出现。
对于每个输入整数n,输出n可表示为最多4个正整数平方之和的表示种数。
Sample Input
1
25
2003
211
20007
0
Output for the Sample Input
1
3
48
7
738
在这里,为了简单起见,在两个程序中我只选取了20007作为测试用例
{
static int cout=0;
static int total=0;
static int sum=0;
public static void main(String[] args)
{
int n=20007;
go(n,1);
System.out.println(cout);
}
public static void go(int n,int top)
{
for(int i=top;i<=215;i++)
{
if(sum>n)return;
if(total>4)return;
if(sum==n){cout++;return;}
sum=sum+i*i;
total++;
go(n,i);
total--;
sum=sum-i*i;
}
}
}
#include <iostream>
using namespace std;
void go(int ,int);
int count=0;
int total=0;
int sum=0;
void main()
{
int n=20007;
go(n,1);
cout<<count;
}
void go(int n,int top)
{
for(int i=top;i<=215;i++)
{
if(sum>n)return;
if(total>4)return;
if(sum==n){count++;return;}
sum=sum+i*i;
total++;
go(n,i);
total--;
sum=sum-i*i;
}
}
这两个程序的算法是一样的,一个是用C++写的,一个用JAVA写的,哪个最先得到运算结果?一般的回答是:当然是用C++写的那个,但是事实是JAVA只花了大约10秒,而C++却花了大约36秒!!其中的原因是什么?!!
程序解决的问题是:拉格朗日第四定律问题
(Input File: lagrange.in; Output: Standard Output)
任何正整数都可以表示为最多不超过4个正整数的平方之和,这是众所周知的拉格朗日的Four-Square定理。这个定理首先由Joseph-Louis Lagrange在1770年证明。你的任务不是解释原初的证明,也不是发现新的证明,而是计数对某个数这个定理成立的表达式有多少种。
对一个给定的正整数n,你要报告将n表示为最多四个正整数平方和的不同表示的种数。注意,表达式中,加法的顺序是无关紧要的,即你必须把32 + 42与42 +32看作是同一种表示。例如,看25,这个数有三种表示:12+22+22+42,32 + 42, 与52,那么你就应该报告3。注意不要重复计数32 + 42与42 +32。
Input
输入最多有255行,每行是一个小于215的正整数,最后一行是一个0,表示输入的结束。
Output
输出也由多行组成,每行是单个整数。输出中没有其他字符出现。
对于每个输入整数n,输出n可表示为最多4个正整数平方之和的表示种数。
Sample Input
1
25
2003
211
20007
0
Output for the Sample Input
1
3
48
7
738
在这里,为了简单起见,在两个程序中我只选取了20007作为测试用例
...全文
相关推荐
cpp-一些觉见编程语言的原生性能比较
标题为"cpp-一些觉见编程语言的原生性能比较"的讨论点聚焦于多种编程语言在原生执行效率上的对比。
【SpringBoot 4.x 第1节】夯爆了,为什么现在要学 Spring Boot 4.x?从零开始理解版本体系、核心变化与真实项目开发路线(超详解)!
🏆 本文收录于 《滚雪球学 Spring Boot 4.x》 专栏。 本专栏面向 有一点 Java 基础,但没有系统学过 Spring Boot 的读者,采用“滚雪球式学习法”:先跑通、再理解、再重构、再上线,最终带你从第一个 Hello API 一路完成一个可部署、可监控、可扩展的后端项目。
cpp-ShuJIT针对x86处理器的JavaJustinTime编译器
**与其他JIT编译器的比较** - 与HotSpot相比,cpp-ShuJIT可能在某些特定场景下表现更优,但在其他方面可能略显不足。开发者需要根据实际需求和性能测试结果来选择合适的JIT编译器。
cpp:Comenzando con cpp
**运算符与表达式**:C++有丰富的运算符,如算术运算符(+,-,*,/,%),比较运算符(==,!=,<,>,<=,>=)和逻辑运算符(&&,||,!)等。
我的C与C++的学习之路.zip
虽然C和C++是经典语言,但现代编程语言如C#、Java、Python等也有其独特的优点和应用场景。了解这些语言可以帮助你更好地理解和比较编程范式,从而成为更全面的开发者。


非技术区
