gpt4 book ai didi

c# - 创建一个数字的质因数分解字符串(带指数)

转载 作者:行者123 更新时间:2023-11-30 16:14:30 26 4
gpt4 key购买 nike

所以我有一个程序可以创建用户输入数字的素因子的二叉树并将它们显示在 treeView 控件中:

Example One

Example Two

现在我想创建一个类似于消息框中显示的字符串,除了指数(“256 = 2 ^ 8”,“1234567890 = 2 X 3 ^ 2 X 5 X 3607 X 3803”)

我当前的代码如下:

private void LabelDisplayCondensed(FactorTreeNode currentNode)
{
string result = Convert.ToString(root.Key) + " = "
+ Convert.ToString(currentNode.Left.Key);
FactorTreeNode prevNode = currentNode;
int exponent = 1;
while (currentNode.Right != null)
{
prevNode = currentNode;
currentNode = currentNode.Right;
if (currentNode.Left.Key == prevNode.Left.Key)
{
exponent += 1;
}
else
{
exponent = 1;
}
if ((exponent != 1) && (currentNode.Left.Key != prevNode.Left.Key))
{
result += " ^ " + exponent + " X " + currentNode.Left.Key;
}
}
MessageBox.Show(result);
}

这是我最近的绝望尝试。该函数用树的根调用。我意识到这段代码是完全有缺陷的。我正在撞的当前墙是 currentNode 到达树中最右边的 child ,评估其 .Left.Key 中的键

if (currentNode.Left.Key == prevNode.Left.Key) 

并因为 .Left 为空而崩溃。

实际上我之前离得更近了。我认为 500 会被评估为“500 = 2 ^ 2 X 5 ^ 2 ^ 2”(而不是理想的 500 = 2 ^ 2 X 5 ^ 3)

这是我的 FactorTreeNode 的代码:

class FactorTreeNode
{
// constants

// variables
private long data; // this is our only data, so also key
private FactorTreeNode leftPointer;
private FactorTreeNode rightPointer;
// these pointers point to the
// left and right children respectively
private FactorTreeNode parentPainter;
// pointer to the parent of the node

// constructors
public FactorTreeNode(long newValue)
{
Key = newValue;
Left = null;
Right = null;
Parent = null;
}

// Properties
public long Key
{
get
{
return data;
}
set
{
data = value;
}
}

public FactorTreeNode Left
{
get
{
return leftPointer;
}
set
{
leftPointer = value;
}
}

public FactorTreeNode Right
{
get
{
return rightPointer;
}
set
{
rightPointer = value;
}
}

public FactorTreeNode Parent
{
get
{
return parentPainter;
}
set
{
parentPainter = value;
}
}
}

我整天都在琢磨这个。感谢您的帮助。

最佳答案

假设您的 FactorTreeNodeclass 是这样的:

class FactorTreeNode
{
public FactorTreeNode(long key) { this.Key = key; }
public FactorTreeNode Left { get; set; }
public FactorTreeNode Right { get; set; }
public long Key { get; private set; }
}

然后这将起作用:

private void LabelDisplayCondensed(FactorTreeNode root)
{
string result = Convert.ToString(root.Key) + " =";

long prevFactor = 0;
int exponent = 0;
bool firstFactor = true;
FactorTreeNode currentNode = root;
while (currentNode != null)
{
long nextFactor = currentNode.Left == null ?
currentNode.Key :
currentNode.Left.Key;
if (nextFactor != prevFactor && prevFactor != 0)
{
result += WriteFactor(prevFactor, exponent, ref firstFactor);
exponent = 1;
}
else
{
exponent++;
}

prevFactor = nextFactor;
currentNode = currentNode.Right;
}

result += WriteFactor(prevFactor, exponent, ref firstFactor);
MessageBox.Show(result);
}

private string WriteFactor(long factor, int exponent, ref bool firstFactor)
{
string result = firstFactor ? " " : " X ";
firstFactor = false;
if (exponent == 1)
{
result += factor.ToString();
}
else
{
result += factor.ToString() + " ^ " + exponent.ToString();
}

return result;
}

显然这不包括检查树是否有效。

您可能还想使用 StringBuilder 来实际构建字符串,而不是执行所有这些附加操作。

关于c# - 创建一个数字的质因数分解字符串(带指数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20671309/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com