Linq中临时计算的处理解决面试题时2和9之间的整数相乘时,需要这样求一个六位数,当数字倒过来的时候原文转动时给出六位数字。示例:假设我乘以219978*4得到879912,当反转879912时我将得到219978。我解决了它使用for(longl=100000;l<999999;l++){varnum=l.ToString();for(inti=3;i<9;i++){varmul=l*i;字符串str=mul.ToString();char[]splitDigits=str.ToCharArray();stringreversedDigit=newstring(splitDigits.Reverse().ToArray());if(reversedDigit.CompareTo(num)==0){Console.WriteLine("{0}*{1}={2},当乘以{3}",num,i,mul,reversedDigit);}}}最初的任务是使用linq来解决它。例如,当我使用var=fromlinEnumerable.Range(100000,999999)fromiinEnumerable.Range(3,9)处理临时计算时,我有点困惑,就像var在linq中处理的一样num=l.ToString()等临时计算方法。在Linq中,我对如何完成它感到困惑。谢谢您的帮助。你想要...//注意:越野车;见下文varqry=fromlinEnumerable.Range(100000,999999)fromiinEnumerable.Range(3,9)lets=l.ToString()lett=(l*i).ToString()wheres.Reverse().SequenceEqual(t)选择新的{l,i};vara=qry.First();Console.WriteLine("一个答案...");.WriteLine("{0}x{1}={2}",al,ai,al*ai);Console.WriteLine("所有答案...");foreach(varrowinqry){Console.WriteLine("{0}x{1}={2}",row.l,row.i,row.l*row.i);}第一个答案(注意包含9来自您原始版本的代码获取,但可能需要改用Range(3,8)):109989x9=989901优化版本(和正确范围):varqry=froml在Enumerable.Range(100000,999999-100000)中让s=l。ToString()letsReversed=newstring(s.Reverse().ToArray())letwanted=int.Parse(sReversed)fromiinEnumerable.Range(3,8-3)其中l*i==wantedselectnew{l,i};这减少了创建的字符串数量,使用整数相等性,并正确使用范围(Range的第二个参数是计数,而不是结束)。这是另一个将问题陈述与一些辅助方法(为了清楚起见)相匹配的解决方案(可以移到原始的linq查询中):privatestaticIEnumerableSixDigitNumbers=Enumerable.Range(100000,(999999-100000));私有静态IEnumerable乘数=Enumerable.Range(2,8);staticvoidMain(string[]args){varSolutions=fromOriginalNumberinSixDigitNumbersfromMultiplierinMultipliersletMultipliedNumber=(OriginalNumber*Multiplier)其中MultipliedNumber全部低于Scheme:{MultipliedNumber=989901,OriginalNumber=109989,Multiplier=9}{MultipliedNumber=879912,OriginalNumber=219978,Multiplier=4}小心Enumerable.Range-我看到一个人回答这个问题错误地排除了两个数字的问题陈述中的要求。以上就是C#学习教程:Linq中处理临时计算分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
