您的位置:首页 > 产品设计 > UI/UE

Project Euler Question 4

2017-01-01 11:01 260 查看
这道题目在运用C# 解决的过程中,需要注意到:

1. C# 中的变量有 值类型,存在stack中,也有
引用类型,存在heap中,但是地址存在stack中。在 C# 中,当我们用 等于号,=,进行赋值操作时,要注意,当等于号两端都是 引用类型时,默认的赋值方式是弱拷贝类型的。当我们对一个变量进行操作时(本质上是对 heap 上的数据进行改变),另外的变量也会改变。

2. C# 语言中的数据类型之间的转换较之 Python 更为繁琐,例如,mychar 是一个一维的字符串数组(char[]  mychar ={'P','i','g'}),myChar.ToString() 的值不是一个string,而是 System.Char[]【具体为什么我还不清楚,但正确的做法是 string mystring = new string (mychar);】; Array.reverse(mychar) 的返回值是空值,而不是reversed_mychar【简直反人类?!!】

3. C# 中,对于数组与列表的定义简直一塌糊度。

数组(Array): 必须定义长度
string str = new string [2]; // Array


数组列表(ArrayList):不必定义长度,数据类型不必一致
ArrayList ls= new ArrayList();  // ArrayList


列表(List):不必定义长度,数据类型必须一致
List<string> myArrayList = new List<string> ();


using System;
using System.Diagnostics;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ProjectEuler01
{
class Program
{

static void Main(string[] args)
{
Stopwatch watch = new Stopwatch();
watch.Start();
////C# 的变量类型转换十分繁琐,两个引用型变量不能检查是否相等 【char.ToString()】这种就不能比较
//char[] a = { 'x', 'x' };
//char[] b = { 'y' };
//Console.WriteLine(a);
//Console.WriteLine(b);
//Char c = 'A';
//Char d = 'A';
//var g = a.ToString();
//Console.WriteLine(g);
//string e = new string(a);
//string f = new string(b);
//Console.WriteLine(e);
//Console.WriteLine(f);

//Console.WriteLine("{0}等于{1},所以{2}",e,f,e.Equals(f));

// Write your code here!

List<int> mylist = new List<int> { };

for (int i = 999; i > 100; i--)
{
for (int j = 999; j > 100; j--)
{
// 注意却分 C# 中的值类型变量 和 引用类型变量 的 深浅拷贝之分
// 注释部分是浅拷贝,只拷贝了堆中的地址。
// 当我们想分别改变两个引用型变量的数值时,我们应该避免在两个变量 数据类型 相同时赋值。
//char[] max = (i * j).ToString().ToCharArray();
//Console.WriteLine(max);
//char[] rev = max;
//Console.WriteLine(max);
//Array.Reverse(max);
//Console.WriteLine(rev);
//Console.WriteLine(max);

int maxi = i * j;
char[] rev_char = maxi.ToString().ToCharArray();
Array.Reverse(rev_char);
char[] max_char = maxi.ToString().ToCharArray();
//Console.WriteLine("=====================================");
//Console.WriteLine(max_char);
//Console.WriteLine("=====================================");
//Console.WriteLine(rev_char);
if ( new string(max_char) == new string(rev_char) )
{
mylist.Add(i * j);
//Console.WriteLine("{0} 和 {1} 的乘积 {2}是回文",i,j,i*j);
//Console.ReadLine();

}

}
}
Console.WriteLine(mylist.Max());

watch.Stop();
double ts = watch.Elapsed.TotalMilliseconds;
Console.WriteLine("Totoal running time is " + ts + " ms ");
Console.ReadLine();
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C#