我发现C anc C#中类似代码之间存在巨大的性能差异.
C代码是:
#include <stdio.h>
#include <time.h>
#include <math.h>
main()
{
int i;
double root;
clock_t start = clock();
for (i = 0 ; i <= 100000000; i++){
root = sqrt(i);
}
printf("Time elapsed: %f\n", ((double)clock() - start) / CLOCKS_PER_SEC);
}
Run Code Online (Sandbox Code Playgroud)
而C#(控制台应用程序)是:
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
DateTime startTime = DateTime.Now;
double root;
for (int i = 0; i <= 100000000; i++)
{
root = Math.Sqrt(i);
} …Run Code Online (Sandbox Code Playgroud) Pandigital数字是一个包含数字1..number长度的数字.
例如123,4312和967412385.
我已经解决了许多Project Euler问题,但Pandigital问题总是超过一分钟规则.
这是我的pandigital功能:
private boolean isPandigital(int n){
Set<Character> set= new TreeSet<Character>();
String string = n+"";
for (char c:string.toCharArray()){
if (c=='0') return false;
set.add(c);
}
return set.size()==string.length();
}
Run Code Online (Sandbox Code Playgroud)
创建自己的函数并使用此方法对其进行测试
int pans=0;
for (int i=123456789;i<=123987654;i++){
if (isPandigital(i)){
pans++;
}
}
Run Code Online (Sandbox Code Playgroud)
使用这个循环,你应该得到720个pandigital数字.我的平均时间是500毫秒.
我正在使用Java,但问题是对任何语言开放.
更新
@andras答案到目前为止是最好的时间,但是@Sani Huttunen的回答激发了我添加一个新的算法,它几乎与@andras相同.
假设您是一名具有C++和C#基础知识的IT学生.我们假设您要设计以下应用:
并且你想学习一个Api,它可以让你编写像前面描述的那样的应用程序,并且:
那么,做出这些假设,你会选择什么Api?MFC,WPF,其他?我非常喜欢VCL和QT,但它们不是主流,我认为很少有雇主会要求你在QT或Visual C++ Builder中编写应用程序......
谢谢你的回答.