namespace ApplicationCore.TestBase;
using System;
public class Class1
{
public static void Main(string[] args)
{
// 一个 node 代表一个数字,数字的大小理论上可以无限大
//[1,1,2,5] 321 node1
//[ 3,4,5] 543 node2
//[1,4,7,0] 864 result
var node1 = new Node()
{
Value = '1',
Next = new Node
{
Value = '1',
Next = new Node()
{
Value = '2',
Next = new Node()
{
Value = '5'
}
}
}
};
var node2 = new Node()
{
Value = '3',
Next = new Node()
{
Value = '4',
Next = new Node()
{
Value = '5'
}
}
};
Console.WriteLine(node1);
Console.WriteLine(node2);
var result = CombineNode(node1, node2);
Console.WriteLine(result);
Console.ReadKey();
}
// 完成这个函数,使 node1 + node2 得到 两个数字的和的 Node
public static Node CombineNode(Node node1, Node node2)
{
Node maxNode;
Node minNode;
var x = node1.Length - node2.Length;
if (x > 0)
{
maxNode = node1;
minNode = node2;
}
else
{
maxNode = node2;
minNode = node1;
}
//将node1 和 node2 按位相加
Node Add(Node node1, Node node2, ref bool r)
{
var node = new Node();
if (node1.Next == null || node2.Next == null)
{
node.Value = AddChar(node1.Value, node2.Value, ref r);
return node;
}
node.Next = Add(node1.Next, node2.Next, ref r);
node.Value = AddChar(node1.Value, node2.Value, ref r);
return node;
}
var temp = maxNode;
var result = new Node(maxNode.Value);
for (long i = 0; i < Math.Abs(x); i++)
{
temp = temp.Next;
var parent = result.Next;
while (result.Next != null)
{
parent = parent.Next;
}
if (parent != null)
parent.Next = new Node(temp.Next.Value);
else
result.Next = new Node(temp.Next.Value);
}
result.Next = null;
bool r = false;
result.Next = Add(minNode, temp, ref r);
if (result != null)
return result;
return result.Next;
}
static char AddChar(char c1, char c2, ref bool r)
{
var c = int.Parse(c1.ToString()) + int.Parse(c2.ToString());
if (r)
{
c++;
r = false;
}
if (c > 9)
{
r = true;
return c.ToString()[1];
}
else return c.ToString()[0];
}
}
public class Node
{
public char Value { get; set; } = '0';
public Node Next { get; set; }
public Node() { }
public Node(char value)
{
Value = value;
}
public override string ToString()
{
if (Next != null)
return Value.ToString() + Next.ToString();
return Value.ToString();
}
public long Length
{
get
{
if (Next == null)
return 0;
return Next.Length + 1;
}
}
}
编程题
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 美团2021校招笔试-编程题(通用编程试题,第9场) T3 环形的最大连续子数和分成两种情况: 这个最大子数组没有...
- 首先理解题目意思:每个人只能做工作序号表里的一件工作且两个人不能同时做一件工作。AC思路:采用暴力枚举每种可能的分...
- 对程序员来说,程序的魅力在于它的变化无穷,对于一门计算机语言来说,他的基础语法是固定有限的,可是编程的花样却是千变...