繁体   English   中英

C# 反转未知数的前2位?

[英]C# Reverse the first 2 digits of an unknown digit number?

所以我正在制作一个游戏,你必须计算斐波那契序列中的下一个数字。 在计时器上

Ex.  0, 1 => next number = 1
     1, 2 => next number = 3
     2, 3 => next number = 5

等等...

问题是......一旦你得到更大的数字,更难计算,你会想要从右到左做基本的加法。 所以你有两个选择,要么在你的脑海里做,要么把它输入下来并在后面反转数字,这正是我编写的代码。

它正在反转数字,使用正常的算法,但有一个问题。

通常,您 go 从右到左进行数学运算,然后键入每个数字,一旦将两个数字的最后一位相加,如果这两个数字的总和超过 10,您只需将数字写在另一个之前数字

Ex: 

567 + 723

1. 7 + 3 => 0                      Number = 0
2. 6 + 2 = 8 + the carried 1 = 9   Number = 90
3. 5 + 7 = 12                      Number = 1290

在输入栏中,您可以像0912一样键入它,但这不起作用,因为12也必须反转为21 因为我不希望这对玩家造成滋扰,所以问题是

如何将数字的前两位数字反转?

我的猜测是添加 1 个变量来存储数字的反向总和,然后添加 2 个其他变量存储前 2 位数字之后的数字,另一个存储前 2 位数字并反转它们,然后添加前 2反转到另一部分的数字乘以 100

即便如此,我不相信这是我最好的选择,因为我无法确定数字是总和 >999 的 3 位数字还是总和 <9999 的普通 4 位数字

如果你有更好的想法,请告诉我。 如果您对我的代码有任何疑问,我很乐意将其发布如果这很难理解,我很抱歉,人类的思想很难解释。

一个相对简单的方法是这样(在这里看到它):

public static long SwapFirstTwoDigits(long val)
{
    if(val < 10) return val;
    
    long mask;
    for(mask = 1; mask < val; mask *= 10) {}
    mask /= 100; // two back
    
    var firstTwoDigits = val / mask;
    return val % mask + (firstTwoDigits % 10) * mask * 10 + firstTwoDigits / 10 * mask;
}

基本上,您构建了您想要单独留下的所有数字的以 10 为基数的掩码(因此在右边的前两位数字后面有两个),并简单地将 rest 与模算术交换。

Output 来自链接的小提琴:

Input: 1530, Output: 5130
Input: 16789, Output: 61789
Input: 34, Output: 43
Input: 3, Output: 3
Input: 0, Output: 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM