网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
06月14日漏签0天
vb吧 关注:156,122贴子:1,166,143
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 35回复贴,共1页
<<返回vb吧
>0< 加载中...

乘幂算法求高手

  • 只看楼主
  • 收藏

  • 回复
  • WWEERR
  • API
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
2^15 = 32768 各个位分解下来的和: 3 + 2 + 7 + 6 + 8 = 26.
求 2^1000各个位分解下来的和
这个该不简单了吧,用VB6写


  • WWEERR
  • API
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
@chengd222


2025-06-14 08:49:01
广告
  • 青春的颜色
  • 吧主
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
2^1000=
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376


  • WWEERR
  • API
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
Option Explicit
Private number As String
Private numberArr() As Long
Private Declare Function GetTickCount Lib "kernel32" () As Long
Public Sub Multi(num As Long)
Dim i As Long
For i = 0 To UBound(numberArr)
numberArr(i) = numberArr(i) * num
Next
For i = 0 To UBound(numberArr)
CarryArr
Next
End Sub
Public Sub setValue(num As Long)
Dim strArr() As String
Dim i As Long
number = CStr(num)
strArr = Split(CStr(number))
ReDim numberArr(0 To UBound(strArr))
For i = 0 To UBound(strArr)
numberArr(i) = Val(strArr(i))
Next
End Sub
Public Sub CarryArr()
Dim i As Long
For i = 0 To UBound(numberArr)
Do
If numberArr(i) >= 10 Then
If i = UBound(numberArr) Then ReDim Preserve numberArr(0 To UBound(numberArr) + 1)
numberArr(i + 1) = numberArr(i + 1) + 1
numberArr(i) = numberArr(i) - 10
Else
Exit Do
End If
Loop
Next
End Sub
Public Function ToString() As String
Dim i As Long
ToString = Space(UBound(numberArr) + 1)
For i = 0 To UBound(numberArr)
Mid(ToString, i + 1, 1) = CStr(numberArr(i))
Next
ToString = StrReverse(ToString)
End Function
Public Function EnumBits() As Long
Dim i As Long
For i = 0 To UBound(numberArr)
EnumBits = EnumBits + numberArr(i)
Next
End Function
Private Sub Form_Load()
Dim t As Long
Dim i As Long
t = GetTickCount()
setValue 2
For i = 2 To 1000
Multi 2
Next
Label1.Caption = "Time:" & GetTickCount - t & " Value:" & EnumBits
End Sub
源码如上


  • Chino
  • API
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不要redim,一开始分配好足够空间,另外算法可以改进
-----------From 度娘贴吧客户端Beta11.11


  • Chino
  • API
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
今天没事用c++写了个…2^10000用时不到300ms
话说你打算以后搞竞赛吗?


  • WWEERR
  • API
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

C#一句话搞定…
@Miss_ZYN


  • WWEERR
  • API
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

还有一种写法


2025-06-14 08:43:01
广告
  • Chino
  • API
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
C++那个写疵了…vb开启全部优化后,事实证明vb还是很快的


  • WWEERR
  • API
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

@Miss_ZYN


  • blushadow
  • 递归爆栈
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
大家这是在打擂么?凑个热闹啊:2^10000

代码如下:
Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Form_Paint()
Dim data(400) As Long, n As Long, i As Long, m As Long, j As Long, k As Long
Dim r As Long, t As Long, p As Long
p = GetTickCount()
n = 1
data(1) = 1
m = 10000
For i = 1 To m
k = 0
For j = 1 To n
data(j) = data(j) + data(j) + k
If data(j) >= 100000000 Then
k = 1
data(j) = data(j) - 100000000
Else
k = 0
End If
Next
If k = 1 Then
n = n + 1
data(n) = 1
End If
Next
r = 0
For i = 1 To n
t = data(i)
While t <> 0
r = r + t Mod 10
t = t \ 10
Wend
Next
Print r
Print GetTickCount() - p
End Sub


  • blushadow
  • 递归爆栈
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
应该是最后计算的时候还有的优化吧。不想了。嘿嘿……


  • blushadow
  • 递归爆栈
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
代码不用改,优化一下VB的编译选项就可以了:


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 35回复贴,共1页
<<返回vb吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示