Java、C#速度大比拼
一、Java和C#速度大比拼第一回合
把f(n) = n的优化(二) 文章中的C#代码照搬不变的转换成Java代:
* Main.java
*
* Created on 2006年9月13日, 下午2:09
*
*/
package test;
import javax.crypto.Mac;
import java.lang.*;
/**
*
* @author jailu
*/
public class Main {
/** Creates a new instance of Main */
public Main() {
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
long start = System.currentTimeMillis(); //程序开始时间
int N = 0; //自然数N
boolean bl = true;
int intCount = 0; //1的总个数
int intTemp = 0; //当前数字含有1的个数
int a = 0,b = 0;
System.out.println("满足条件f(n)=n的n值列表:");
//核心代码
while(bl)
{
if (N % 10 == 1)
{
intCount++;
intCount += intTemp;
}
else if (N % 10 == 0)
{
intTemp = 0; //统计1的个数
b = N;
while (b > 0)
{
a = b % 10;
if (a == 1)
{
intTemp++;
}
b = (b - a) / 10;
}
intCount += intTemp;
}
else if (N % 10 == 2)
{
intCount += intTemp;
if ((intCount >= N) && (intCount <= (N + 8)))
{
}
else
{
N += 7;
intCount += (7 * intTemp);
}
}
else
{
intCount += intTemp;
}
if (intCount == N)
{
System.out.println(N + "\t耗时\t" + (System.currentTimeMillis()
- start) + "ms");
}
if (N >= 1111111111)
{
bl = false;
System.out.println("\n程序结束!");
System.out.println("共耗时" + (System.currentTimeMillis() - star
t));
}
N ++;
}
// System.out.println("\n程序结束!");
// System.out.println("共耗时" + (System.currentTimeMillis() - start));
}
}
部分结果如下:
535199986 耗时 35078ms
535199987 耗时 35078ms
535199988 耗时 35078ms
535199989 耗时 35078ms
535199990 耗时 35078ms
535200000 耗时 35078ms
535200001 耗时 35078ms
1111111110 耗时 74313ms
程序结束!
共耗时74313
由此可见Java程序运行时间约为74s,而C#程序的运行速度约为80s,此回合Java胜出。
二、Java和C#速度大比拼第二回合:同时修改Java和C#代码(while(N <= 1111111110)),下面列出Java代码,C#代码与之类似:
* Main.java
*
* Created on 2006年9月13日, 下午2:09
*
*/
package test;
import javax.crypto.Mac;
import java.lang.*;
/**
*
* @author jailu
*/
public class Main {
/** Creates a new instance of Main */
public Main() {
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
long start = System.currentTimeMillis(); //程序开始时间
int N = 0; //自然数N
int intCount = 0; //1的总个数
int intTemp = 0; //当前数字含有1的个数
int a = 0,b = 0;
System.out.println("满足条件f(n)=n的n值列表:");
//核心代码
while(N <= 1111111110)
{
if (N % 10 == 1)
{
intCount++;
intCount += intTemp;
}
else if (N % 10 == 0)
{
intTemp = 0; //统计1的个数
b = N;
while (b > 0)
{
a = b % 10;
if (a == 1)
{
intTemp++;
}
b = (b - a) / 10;
}
intCount += intTemp;
}
else if (N % 10 == 2)
{
intCount += intTemp;
if ((intCount >= N) && (intCount <= (N + 8)))
{
}
else
{
N += 7;
intCount += (7 * intTemp);
}
}
else
{
intCount += intTemp;
}
if (intCount == N)
{
System.out.println(N + "\t耗时\t" + (System.currentTimeMillis() - start) + "ms");
}
N ++;
}
System.out.println("\n程序结束!");
System.out.println("共耗时" + (System.currentTimeMillis() - start));
}
}
部分结果如下:
535199986 耗时 34828ms
535199987 耗时 34828ms
535199988 耗时 34828ms
535199989 耗时 34828ms
535199990 耗时 34828ms
535200000 耗时 34843ms
535200001 耗时 34843ms
1111111110 耗时 73656ms
程序结束!
共耗时73656
而C#程序的运行结果如下:
535199988
Total Time: 00:00:39.2187500
535199989
Total Time: 00:00:39.2187500
535199990
Total Time: 00:00:39.2187500
535200000
Total Time: 00:00:39.2187500
535200001
Total Time: 00:00:39.2187500
1111111110
Total Time: 00:01:23.1250000
Start Time: 2006-9-13 16:02:38
End Time: 2006-9-13 16:04:01
Total Time: 00:01:23.1250000
运行结束!
由结果可以看出:
1、第二回合中的Java程序比第一回合中的Java程序快了0.7s左右;
2、第二回合中的C#程序非但没比第一回合中的C#程序快,反而慢了3s多,汗个,搞不懂是怎么回事,有兴趣的朋友可以自己试下!
3、第二回合大比拼中,Java胜出!
经此两回合的较量,不难发现:Java的运行速度略快于C#的运行速度!