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): 必须定义长度
数组列表(ArrayList):不必定义长度,数据类型不必一致
列表(List):不必定义长度,数据类型必须一致
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(); } } }
相关文章推荐
- Project Euler Question 3
- Project Euler Question 07 C# Solution
- Project Euler problem 40
- project euler Problem 56
- Project Euler -> problem 5
- Project euler problem 21找合适的一对数之总和
- project euler problem 24
- Project euler problem 31 - 40
- project euler problem 11
- project euler Problem 3
- http://projecteuler.net/problem=5【求解数组所有元素的最小公倍数】
- http://projecteuler.net/problem=30 [Answer:443839]
- Project Euler Problem 4: Largest palindrome product
- Project Euler Problem 23 Non-abundant sums
- Project Euler Problem 9
- Project Euler problem 13
- Project Euler problem 26 分数化小数
- Project Euler problem 41
- Euler Project 29