Roy*_*mir 3 c# binary numbers .net-2.0
朋友问我:
如果2^10 = 1024 ,我们可以取1024并打破并总结其数字:
1+0+2+4 = 7.
这很简单.
但是当输入是2^30000(输入实际上是一个长字符串"1000...") - 没有.net类型可以保存此值.
所以必须有一个技巧来加总其数字(十进制数字的数字)....
编辑:
相关技巧(寻找10^20 - 16)
100 = 10 ^ 2(一个和两个零)
10 ^ 20 =(1和20个零)
因此:
10 ^ 20 - 16 = 18个9,8个和4个.
18*9 + 8 + 4 = 174
但我没有成功将这个解决方案转换成我的问题.(我尝试了很多).
*我将这个问题标记为.net因为我可以使用字符串函数,来自.net库的数学函数.*
题
这里有什么技巧可以让我总结许多数字,这是x^n什么结果?
这里的诀窍是什么?
编辑#2:添加.net2标签(biginteger不可用) - 我想知道如何在没有biginteger的情况下做到这一点.(我正在寻找隐藏的技巧)
您可以利用BigInteger结构来执行此操作.因为它是用MSDN编写的
BigInteger类型是一个不可变类型,表示一个任意大的整数,其理论上的值没有上限或下限.
基本上在创建BigInteger实例和评估指数后,您可以将其转换为字符串.之后,您将遍历该字符串的每个字符并将每个char转换为int数.添加所有这些int数字,你会得到你的答案.
BigInteger bi = new BigInteger(2);
var bi2 = BigInteger.Pow(bi, 30000);
BigInteger sum = new BigInteger();
foreach(var ch in bi2.ToString())
sum = BigInteger.Add(sum, new BigInteger(int.Parse(ch.ToString())));
MessageBox.Show(bi2.ToString() + " - " + sum.ToString());
Run Code Online (Sandbox Code Playgroud)
我不知道找到一个数字的基数10位数的一般技巧.
但是,有一个简单的技巧可以找到一个数字的基数为10的数字根.
正如您所说,数字总和只是所有数字的总和.1024的基数10位数是1 + 2 + 4 = 7.基数10位数和65536是6 + 5 + 5 + 3 + 6 = 25.
数字根是重复数字总和时得到的,直到只有一个数字.数字总和65536是25,因此数字根是2 + 5 = 7.
技巧是:如果你有Z = X*Y,那么DigitRoot(Z)= DigitRoot(DigitRoot(X)*DigitRoot(Y)).(向读者练习:证明它!提示:首先证明添加相同的身份.)
如果你有一个容易考虑的数字 - 并且最容易计算的数字是2 n - 那么很容易递归地找出数字根:2 16 = 2 8*2 8,所以DigitRoot(2 16)= DigitRoot( DigitRoot(2 8)*DigitRoot(2 8)) - 我们只是把问题变得更小了.现在我们不必计算2 16,我们只需计算2 8.你当然可以使用2 30000这个技巧- 将其分解为DigitRoot(DigitRoot(2 15000*DigitRoot(2 15000)).如果2 15000太大,请将其分解;继续将其分解,直到你有一个问题小得足以解决.
合理?
| 归档时间: |
|
| 查看次数: |
1668 次 |
| 最近记录: |