c# - 如何提取数字的位值?

标签 c# unity3d math multiplication

我正在使用 C# 在 Unity 游戏引擎中开发一个数学游戏,特别是一个可重复使用的组件,用于教授乘法的网格方法。例如,当给出数字 34 和 13 时,它应该生成一个 3X3 网格(乘数和被乘数位值的标题列和行,乘数和被乘数中的位数为 2X2)。看起来像这样的东西:

Multiplication grid

我的问题是我不知道提取数字位值的最佳方法(例如 34 -> 30 和 4)。我正在考虑将它转换为字符串,根据其索引将 0 添加到较高的位值,然后将其转换回 int,但这似乎是一个糟糕的解决方案。有更好的方法吗?

注意:我几乎只处理正整数,但位值的数量可能会有所不同。


感谢所有回答的人!我认为发布我用所有回复构建的特定于 Unity 的解决方案可能会有所帮助:

List<int> GetPlaceValues(int num) {
    List<int> placeValues = new List<int>();
    while (num > 0) {
        placeValues.Add(num % 10);
        num /= 10;
    }
    for(int i = 0;i<placeValues.Count;i++) {
        placeValues[i] *= (int)Mathf.Pow(10, i);
    }
    placeValues.Reverse();
    return placeValues;
}

最佳答案

利用我们的数字系统的工作方式。这是一个基本示例:

string test = "12034";
for (int i = 0; i < test.Length; ++i) {
    int digit = test[test.Length - i - 1] - '0';
    digit *= (int)Math.Pow(10, i);
    Console.WriteLine("digit = " + digit);
}

基本上,它从最右边的数字开始读取(假设输入是一个整数),并使用我们系统工作方式的方便位值来计算数字的含义。

test.Length - i - 1 将最右侧视为 0,并在左侧索引正值。

- '0' 将 '0' 的编码值转换为实际数字。

Play with the code

关于c# - 如何提取数字的位值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47873772/

相关文章:

c# - Windows DPI 设置影响 Graphics.DrawString

c# - 如何检索在 string.Contains 方法中传递的值?

javascript - 如何为 Unity 2019 添加 JavaScript 支持?

python - Scipy 退出 : Unexpected behavour. NaN

c# - ASP.NET Core Identity,如何覆盖 IdentityRole 名称唯一索引?我想存储关于租户的重复名称

c# - 如何锁定单个骨架

c# - 使用 Unity 在 C# 中发送 http 请求

java - Unity 中的回调监听器 - 如何从 Android 中的 UnityPlayerActivity 调用脚本文件方法

python - 计算给定谐波节点或多个节点的结果频率,四舍五入到小于 n 的最接近的谐波

math - 如何在更高维度的超球面上均匀分布点?