Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2472|回复: 7

按规律拆分正整数

[复制链接]
发表于 2008-2-19 21:36 | 显示全部楼层 |阅读模式
本帖最后由 爱疯 于 2013-4-2 08:44 编辑 <br /><br /><P>我也来出一个题.</P>
<P>输入任一正整数,按规律将其拆分为多个整数,并分别输出.输出的整数必须满足如下条件:<BR>1.必须是2的n次方(n为非负整数),如1,2,4,8,16,32......;<BR>2.每个数只能出现一次:</P>
<P>-------------------------<BR>下面是几个示例:<BR>输入数字 15,输出结果为:8,4,2,1&nbsp;&nbsp;&nbsp; (8+4+2+1=15)<BR>输入数字 29,输出结果为:16,8,4,1&nbsp;&nbsp; (16+8+4+1=29)<BR>输入数字 130,输出结果为:128,2&nbsp;&nbsp;&nbsp;&nbsp; (128+2=130)</P>
<DIV align=right><FONT color=#000066>[此贴子已经被作者于2008-2-21 0:33:05编辑过]</FONT></DIV>
发表于 2008-2-20 08:32 | 显示全部楼层

<p>Sub TenToTwo()<br/>&nbsp;&nbsp;&nbsp; Dim a&amp;, b&amp;, i%, k%<br/>&nbsp;&nbsp;&nbsp; Dim f As String<br/>&nbsp;&nbsp;&nbsp; Dim c(1 To 100) As Long<br/>&nbsp;&nbsp;&nbsp; b = InputBox("please enter your number")<br/>&nbsp;&nbsp;&nbsp; Do While b &lt;&gt; 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a = Int(b / 2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b = a<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = i + 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c(i) = a Mod 2<br/>&nbsp;&nbsp;&nbsp; Loop<br/>&nbsp;&nbsp;&nbsp; For k = 1 To i<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If c(k) = 1 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f = 2 ^ k &amp; "," &amp; f<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Next<br/>&nbsp;&nbsp;&nbsp; f = Left(f, Len(f) - 1)<br/>&nbsp;&nbsp;&nbsp; MsgBox f<br/>End Sub</p><p>&nbsp;</p>
回复

使用道具 举报

 楼主| 发表于 2008-2-20 12:22 | 显示全部楼层

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>联想</i>在2008-2-20 8:32:00的发言:</b><br/><p>Sub TenToTwo()<br/>&nbsp;&nbsp;&nbsp; Dim a&amp;, b&amp;, i%, k%<br/>&nbsp;&nbsp;&nbsp; Dim f As String<br/>&nbsp;&nbsp;&nbsp; Dim c(1 To 100) As Long<br/>&nbsp;&nbsp;&nbsp; b = InputBox("please enter your number")<br/>&nbsp;&nbsp;&nbsp; Do While b &lt;&gt; 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a = Int(b / 2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b = a<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = i + 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c(i) = a Mod 2<br/>&nbsp;&nbsp;&nbsp; Loop<br/>&nbsp;&nbsp;&nbsp; For k = 1 To i<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If c(k) = 1 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f = 2 ^ k &amp; "," &amp; f<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Next<br/>&nbsp;&nbsp;&nbsp; f = Left(f, Len(f) - 1)<br/>&nbsp;&nbsp;&nbsp; MsgBox f<br/>End Sub</p><p>&nbsp;</p></div><p>偶数正确,奇数错误.奖7金币.</p>
回复

使用道具 举报

发表于 2008-2-20 16:34 | 显示全部楼层

Sub TenToTwo()<br/>&nbsp;&nbsp;&nbsp; Dim a&amp;, b&amp;, i%, k%<br/>&nbsp;&nbsp;&nbsp; Dim f As String<br/>&nbsp;&nbsp;&nbsp; Dim c(1 To 100) As Long<br/>&nbsp;&nbsp;&nbsp; b = InputBox("please enter your number")<br/>&nbsp;&nbsp;&nbsp; Do While b &lt;&gt; 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = i + 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c(i) = b Mod 2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a = Int(b / 2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b = a<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; Loop<br/>&nbsp;&nbsp;&nbsp; For k = 1 To i + 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If c(k) = 1 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f = 2 ^ (k - 1) &amp; "," &amp; f<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Next<br/>&nbsp;&nbsp;&nbsp; f = Left(f, Len(f) - 1)<br/>&nbsp;&nbsp;&nbsp; MsgBox f<br/>End Sub<br/>改正一下,谢谢指正.
回复

使用道具 举报

发表于 2008-2-20 16:39 | 显示全部楼层

<div class="quote" twffan="done"><b>以下是引用<i>联想</i>在2008-2-20 16:34:00的发言:</b><br/>Sub TenToTwo()<br/>&nbsp;&nbsp;&nbsp; Dim a&amp;, b&amp;, i%, k%<br/>&nbsp;&nbsp;&nbsp; Dim f As String<br/>&nbsp;&nbsp;&nbsp; Dim c(1 To 100) As Long<br/>&nbsp;&nbsp;&nbsp; b = InputBox("please enter your number")<br/>&nbsp;&nbsp;&nbsp; Do While b &lt;&gt; 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = i + 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c(i) = b Mod 2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a = Int(b / 2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b = a<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; Loop<br/>&nbsp;&nbsp;&nbsp; For k = 1 To i + 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If c(k) = 1 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f = 2 ^ (k - 1) &amp; "," &amp; f<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Next<br/>&nbsp;&nbsp;&nbsp; f = Left(f, Len(f) - 1)<br/>&nbsp;&nbsp;&nbsp; MsgBox f<br/>End Sub<br/>改正一下,谢谢指正.</div><p></p>学习了
回复

使用道具 举报

 楼主| 发表于 2008-2-21 00:25 | 显示全部楼层

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>联想</i>在2008-2-20 16:34:00的发言:</b><br/>Sub TenToTwo()<br/>&nbsp;&nbsp;&nbsp; Dim a&amp;, b&amp;, i%, k%<br/>&nbsp;&nbsp;&nbsp; Dim f As String<br/>&nbsp;&nbsp;&nbsp; Dim c(1 To 100) As Long<br/>&nbsp;&nbsp;&nbsp; b = InputBox("please enter your number")<br/>&nbsp;&nbsp;&nbsp; Do While b &lt;&gt; 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = i + 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c(i) = b Mod 2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a = Int(b / 2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b = a<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; Loop<br/>&nbsp;&nbsp;&nbsp; For k = 1 To i + 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If c(k) = 1 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f = 2 ^ (k - 1) &amp; "," &amp; f<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Next<br/>&nbsp;&nbsp;&nbsp; f = Left(f, Len(f) - 1)<br/>&nbsp;&nbsp;&nbsp; MsgBox f<br/>End Sub<br/>改正一下,谢谢指正.</div><p></p>[em17][em17][em17][em17]
回复

使用道具 举报

 楼主| 发表于 2008-2-21 00:29 | 显示全部楼层

'来一段递归方式的:<br/>'主程序<br/>Sub 拆分正整数()<br/>&nbsp;&nbsp;&nbsp; Dim num As Long, strOutPut As String<br/>&nbsp;&nbsp;&nbsp; num = InputBox("请输入一个正整数")<br/>&nbsp;&nbsp;&nbsp; strOutPut = 拆分(num, "")<br/>&nbsp;&nbsp;&nbsp; MsgBox "最后结果为:" &amp; Right(strOutPut, Len(strOutPut) - 1)<br/>End Sub<br/>'递归函数<br/>Function 拆分(ByVal n As Long, ByVal strTemp As String)<br/>&nbsp;&nbsp;&nbsp; Dim lngTemp As String, lngNewNum As Long<br/>&nbsp;&nbsp;&nbsp; lngTemp = 2 ^ Int(Application.WorksheetFunction.Log(n, 2))<br/>&nbsp;&nbsp;&nbsp; lngNewNum = n - lngTemp<br/>&nbsp;&nbsp;&nbsp; If lngNewNum &gt; 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lngTemp = 拆分(lngNewNum, lngTemp)<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; 拆分 = strTemp &amp; "," &amp; lngTemp<br/>End Function<br/>
回复

使用道具 举报

发表于 2008-2-23 10:31 | 显示全部楼层

Sub tentotwo()<br/>&nbsp;&nbsp;&nbsp; Dim i As Integer, a As Long, result As String<br/>&nbsp;&nbsp;&nbsp; a = InputBox("输入一个正整数")<br/>&nbsp;&nbsp;&nbsp; Do While a &gt; 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b = a Mod 2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = i + 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If b = 1 Then result = 2 ^ (i - 1) &amp; "," &amp; result<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a = a \ 2<br/>&nbsp;&nbsp;&nbsp; Loop<br/>&nbsp;&nbsp;&nbsp; MsgBox Left(result, Len(result) - 1)<br/>End Sub<br/>上面程序太长,再简化一下.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-26 07:48 , Processed in 0.229772 second(s), 3 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表