我想将一个号码加入另一个号码而不是添加它。
示例:我希望1 + 1
代替2
制作11
。
我认为我能做的唯一事情是+ 1
,但这只是2
,而我希望它能成为11。
答案 0 :(得分:5)
如果我理解你的要求,你想要这个:
1 + 1 = 11
而不是:
1 + 1 = 2
为此,只需将数字转换为字符串并将它们连接起来。然后,您可以将结果转换回数字。
string result = 1.ToString() + 1.ToString(); // or, "1" + "1"
result == "11";
int numberResult = Convert.ToInt32(result);
答案 1 :(得分:3)
您可以使用取幂和对数来避免字符串实例化和转换:
public static int Concat(int x, int y)
{
return x * (int)Math.Pow(10, Math.Floor(Math.Log(y, 10)) + 1) + y;
}
这可以通过将x
乘以10的幂来实现,其中y
具有与y
一样多的零,然后将Concat(1, 1) : 1 * 10 + 1
Concat(3, 54) : 3 * 100 + 54
Concat(28, 999) : 28 * 1000 + 999
Concat(76, 84215) : 76 * 100000 + 84215
加到其上。数学上: x ×10 ⌊log 10 y ⌋+ 1 + y 。
这将导致两个数字的十进制表示似乎已连接的结果。 例如:
Pow
如果您知道自己的数字通常较小,则可以编写热门路径以避免计算成本高昂的Log
和public static int Concat(int x, int y)
{
if (y < 10) return x * 10 + y;
if (y < 100) return x * 100 + y;
if (y < 1000) return x * 1000 + y;
if (y < 10000) return x * 10000 + y;
return x * (int)Math.Pow(10, Math.Floor(Math.Log(y, 10)) + 1) + y;
}
操作:
installDebug
答案 2 :(得分:2)
如果您需要在代码中多次添加它,最好创建一个这样的函数:
public static int JoinNumber(int x, int y)
{
int z = 0;
string temp = Convert.ToString(x) + Convert.ToString(y);
z = Convert.ToInt32(temp);
return z;
}
或
public static int JoinNumber(int x, int y)
{
return Convert.ToInt32(Convert.ToString(x) + Convert.ToString(y));
}
您需要根据您的要求为long和其他类型创建重载。
答案 3 :(得分:1)
你想要的只是:
string result = String.Concat(1, 1);
真的,就是这样。
如果出于不明原因,您想要返回整数值:
int result = Int32.Parse(String.Concat(1, 1));
小心溢出。