项目欧拉的问题16: 2 ^(15)= 32768,其数字之和为3 + 2 + 7 + 6 + 8 = 26.
数字2 ^(1000)的数字总和是多少?
我一直试图在几天内解决这个问题而且我无法弄清楚如何让vb.net 2008识别出那个大数字附近的任何地方。我在其他帖子中看到像java这样的软件有整数类型BigNumber或BigInteger,但我在visual basic中找不到类似的东西。我使用Visual Basic遇到了很多这个问题。我也似乎无法在Visual Basic中找到任何标准的高级数学特征,例如阶乘和其他一些我不记得但在数学特征下找不到的。有什么建议? (抱歉,让我重新说一下,如何在不改用其他编程语言的情况下完成这些工作的任何建议。)
答案 0 :(得分:4)
您可以免费使用几个可以使用的BigInteger库。
在这种情况下,限制不一定是语言。除基本数学运算外,Visual Basic在很大程度上取决于BCL的功能。对于在CLR上运行的大多数语言(包括C#)都是如此。但在大多数情况下,可以使用库来增强框架的功能。
答案 1 :(得分:4)
这里是我写的函数,纯粹为了这个目的而自己实现BigInteger并不是那么困难(但很难让它变得高效和通用,但这就是库的用途)
Public Shared Function Problem16(ByVal power As Integer) As String
Dim digits As Integer = CInt(Int(power * Log10(2)))
Dim number(digits) As Byte
number(digits) = 1
For i As Integer = 1 To power
Dim carry As Byte = 0
For j As Integer = digits To 0 Step -1
number(j) <<= 1
number(j) += carry
If number(j) > 9 Then
carry = number(j) \ CByte(10)
number(j) -= CByte(10)
Else
carry = 0
End If
Next
Next
Dim result As Integer
For i As Integer = 0 To digits
result += number(i)
Next
Return result.ToString
End Function
答案 2 :(得分:0)
我没有尝试过,但似乎有一个Big Integer构造用于Visual Basic。
答案 3 :(得分:0)
public static void main(String[] args) {
int m = 2, ci = 1, n = 1000, i;
int[] arr = new int[n + 1];
arr[1] = 1;
for (i = 1; i <= n; i++) {
int carry = 0;
for (int j = 1; j <= ci; j++) {
arr[j] = arr[j] * m + carry;
carry = arr[j] / 10;
arr[j] = arr[j] % 10;
}
if (carry > 0) {
while (carry > 0) {
ci++;
arr[ci] = carry % 10;
carry = carry / 10;
}
}
}
int sum = 0;
System.out.println(ci + "\n \n ");
for (int j = ci; j > 0; j--) {
System.out.print(arr[j]);
sum = sum + arr[j];
}
System.out.println("\n \n " + sum);
}
答案: 2 ^ 1000:302
中的位数2 ^ 1000 = 10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
数字之和:1366