<?xml version="1.0" encoding="utf-8"?><rss version="2.0">
<channel>
<title><![CDATA[我的奋斗，美丽的代码]]></title>
<link>http://blog.pfan.cn/bclz</link>
<description>编程爱好者博客</description>
<language>zh-cn</language>
			<item>
		<title><![CDATA[原创&nbsp;C++流式输出输出的的格式控制]]></title>
		<link>http://blog.pfan.cn/bclz/41139.html</link>
		<description><![CDATA[C++流式输出输出的的格式控制&nbsp;&nbsp;&nbsp; 对于流数据的输入输出格式，C++提供了两种不同的控制方式，一种是使用ios_base类提供的setf、width等函数设置输入输出格式,另一种是通过重载的格式控制符“&lt;&lt;”、“&gt;&gt;”以及流格式控制对象进行设置。&nbsp;&nbsp;&nbsp; 本文只介绍:用函数设置或者恢复格式&nbsp;&nbsp;&nbsp; 大部分流的输入输出格式可以用setf函数来设置。该函数有两种重载形式。其但参数的setf原型为：&nbsp;&nbsp;&nbsp; fmtflage setf(fmtfalg flag)&nbsp;&nbsp;&nbsp; 参数flag说明所要设置的格式,由ios_base给出,可取如下枚举常量:&nbsp;&nbsp;&nbsp; enum{&nbsp;&nbsp;&nbsp; left&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; =0x0001,&nbsp;&nbsp;&nbsp; //在域中靠左输出&nbsp;&nbsp;&nbsp; right&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; =0x0002,&nbsp;&nbsp;&nbsp; //在域中靠右输出&nbsp;&nbsp;&nbsp; internal&nbsp;&nbsp;&nbsp; =0x0004,&nbsp;&nbsp;&nbsp; //符号靠左数值靠右输出,中间默认以空格填充&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; dec&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; =0x0008,&nbsp;&nbsp;&nbsp; //数值以十进制输出&nbsp;&nbsp;&nbsp; hex&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; =0x0010,&nbsp;&nbsp;&nbsp; //以16进制输出&nbsp;&nbsp;&nbsp; oct&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; =]]></description>
		<author><![CDATA[hanshuyujifen]]></author>
		<pubDate>2009-03-01 11:05:00</pubDate>
		</item>
				<item>
		<title><![CDATA[好的程序经理应该具备的条件]]></title>
		<link>http://blog.pfan.cn/bclz/40895.html</link>
		<description><![CDATA[好的程序经理应该具备以下几个条件：
    一、技术水平是程序员队伍中的最高级别
    每个程序员骨子里头都有一股傲气，如果你不能技压群雄，他们就不会听你指挥。一个技术水平较差的人被任命为程序经理真是个悲剧，就象一个略有权势的太监，表面上有人对他点头哈腰，背后却被人鄙视。
    二、能做最多且最难的工作
    程序经理编程要快且好。别人要干一天的活，他半天就能做完，这样才会有精力去搞管理。程序经理应负责系统分析、系统设计这类最难的开发工作，并指导不同水平的程序员把各自的工作做好。如果人手不够，程序经理要能同时干几个人的活。
    三、有人格魅力
    软件开发是智力创作过程，你不能指望仅通过执行规章制度来产生好的作品。很多软件公司的程序经理都不是管理专业出身的，他们也不可能为了搞好管理而成天玩弄心机。技术出色的程序经理一般少有心术不正的，所以管理的重点应是“以身作则”、“公正待人”。如果程序经理在上班时趴在桌上睡觉，其他程序员也会这样干。如果程序经理发现有两个程序员趴在机器旁睡觉，不能只对其中一个大声吼叫：“你一编程就想睡觉，看看人家，在睡觉时都想着编程。”
    如果管理者没有人格魅力，就没有人信服你，团队就不会有凝聚力，乌合之众不可能开发出优秀的软件。
    结论：一个有活力的软件公司的各级经理都不会这样感叹，“因为我啥也不会干，所以只好当领导。”]]></description>
		<author><![CDATA[hanshuyujifen]]></author>
		<pubDate>2009-02-16 20:09:00</pubDate>
		</item>
				<item>
		<title><![CDATA[聪明人的标准]]></title>
		<link>http://blog.pfan.cn/bclz/40894.html</link>
		<description><![CDATA[聪明人一定反应敏捷，善于接受新事物。他能迅速进入一个新领域，给你一个头头是道的解释。他提出的问题往往一针见血、击中要害。他能及时掌握所学知识，并且博闻强记，他能把本来认为互不相干的领域联系在一起使问题得到解决。他富有创新精神与合作精神……]]></description>
		<author><![CDATA[hanshuyujifen]]></author>
		<pubDate>2009-02-16 20:07:00</pubDate>
		</item>
				<item>
		<title><![CDATA[白龙马与小毛驴]]></title>
		<link>http://blog.pfan.cn/bclz/40893.html</link>
		<description><![CDATA[唐太宗贞观年间，长安城西的一家磨房里，有一匹马和一头驴子。他们是好朋友，马在外边拉东西，驴子在屋里推磨。贞观三年，这匹马被玄奘大师选中，出发经西域前往印度取经。
    17年后，这匹马驮着佛经回到长安。他重到磨房会见驴子朋友。老马谈起这次旅途的经历：浩瀚无边的沙漠，高入云霄的山岭，凌峰的冰雪，热海的波澜......那些神话般的境界，使驴子听的万分惊异。驴子惊叹道：“你有那么丰富的见闻啊！那么遥远的路途，我连想都不敢想。”
    “其实，”老马说，“我们跨过的距离是大体相等的，当我向西域前进的时候，你一部也没停止。不同的是，我同玄奘大师有一个遥远的目标，按照始终如一的方向前进，所以我们打开了一个广阔的世界。而你被蒙住了眼睛，一生就围着磨盘打转，所以永远也走不出这篇狭隘的天地。”]]></description>
		<author><![CDATA[hanshuyujifen]]></author>
		<pubDate>2009-02-16 20:05:00</pubDate>
		</item>
				<item>
		<title><![CDATA[【原创】PKU1331解题报告(源代码)]]></title>
		<link>http://blog.pfan.cn/bclz/40541.html</link>
		<description><![CDATA[PKU1331代码题意:6*9&nbsp;=&nbsp;42&quot;&nbsp;is&nbsp;not&nbsp;true&nbsp;for&nbsp;base&nbsp;10,&nbsp;but&nbsp;is&nbsp;true&nbsp;for&nbsp;base&nbsp;13.&nbsp;That&nbsp;is,&nbsp;6(13)&nbsp;*&nbsp;9(13)&nbsp;=&nbsp;42(13)&nbsp;because&nbsp;42(13)&nbsp;=&nbsp;4&nbsp;*&nbsp;131&nbsp;+&nbsp;2&nbsp;*&nbsp;130&nbsp;=&nbsp;54(10).You&nbsp;are&nbsp;to&nbsp;write&nbsp;a&nbsp;program&nbsp;which&nbsp;inputs&nbsp;three&nbsp;integers&nbsp;p,&nbsp;q,&nbsp;and&nbsp;r&nbsp;and&nbsp;determines&nbsp;the&nbsp;base&nbsp;B&nbsp;(2&lt;=B&lt;=16)&nbsp;for&nbsp;which&nbsp;p&nbsp;*&nbsp;q&nbsp;=&nbsp;r.&nbsp;If&nbsp;there&nbsp;are&nbsp;many&nbsp;candidates&nbsp;for&nbsp;B,&nbsp;output&nbsp;the&nbsp;smallest&nbsp;one.&nbsp;For&nbsp;example,&nbsp;let&nbsp;p&nbsp;=&nbsp;11,&nbsp;q&nbsp;=&nbsp;11,&nbsp;and&nbsp;r&nbsp;=&nbsp;121.&nbsp;Then&nbsp;we&nbsp;have&nbsp;11(3)&nbsp;*&nbsp;11(3)&nbsp;=&nbsp;121(3)&nbsp;because&nbsp;11(3)&nbsp;=&nbsp;1&nbsp;*&nbsp;31&nbsp;+&nbsp;1&nbsp;*&nbsp;30&nbsp;=&nbsp;4(10)&nbsp;and&nbsp;121(]]></description>
		<author><![CDATA[hanshuyujifen]]></author>
		<pubDate>2009-01-17 14:02:00</pubDate>
		</item>
				<item>
		<title><![CDATA[求全排列问题的算法]]></title>
		<link>http://blog.pfan.cn/bclz/39391.html</link>
		<description><![CDATA[//全排列问题/*&nbsp;&nbsp;&nbsp;&nbsp;设R={r1,r2,...rn}是要进行排列的n个元素.Ri=R-{ri}.集合X中元素的全排列记为&nbsp;&nbsp;&nbsp;&nbsp;Perm(X).(ri)Perm(X)表示在全排列Perm(X)的每一个排列前加上前缀ri得到的排列&nbsp;&nbsp;&nbsp;&nbsp;R的全排列可归纳定义如下:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当n=1时,Perm(R)=(r),其中r是集合R中唯一的元素;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当r&gt;1时,Perm(R)由(r1)Perm(r1),(r2)Perm(r2).....(rn)Perm(rn)构成.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;依此递归定义,Perm(R)的递归算法如下:*/#include&nbsp;&lt;iostream&gt;#include&nbsp;&lt;cstdlib&gt;using&nbsp;namespace&nbsp;std;void&nbsp;swap(int&nbsp;&amp;&nbsp;a,int&nbsp;&amp;&nbsp;b){&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;temp=a;a=b;b=temp;}void&nbsp;Perm(int&nbsp;list[],int&nbsp;k,int&nbsp;m){&nbsp;&nbsp;&nbsp;&nbsp;if(k==m)&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i=0;i&lt;=m;i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;list[i]&lt;&lt;&quot;&nbsp;&quot;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&]]></description>
		<author><![CDATA[hanshuyujifen]]></author>
		<pubDate>2008-11-14 18:19:00</pubDate>
		</item>
				<item>
		<title><![CDATA[#pragma指令使用简介(很好，转之)]]></title>
		<link>http://blog.pfan.cn/bclz/39061.html</link>
		<description><![CDATA[#pragma指令使用简介(转)

    在编写程序的时候,我们经常要用到#pragma指令来设定编译器的状态或者是指示编译器完成一些特定的动作.下面介绍了一下该指令的一些常用参数,希望对大家有所帮助! 
一. message 参数。 
message 
    它能够在编译信息输出窗口中输出相应的信息，这对于源代码信息的控制是非常重要的。其使用方法为：  
#pragma message(“消息文本”)  
    当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。  
    当我们在程序中定义了许多宏来控制源代码版本的时候，我们自己有可能都会忘记有没有正确的设置这些宏，此时我们可以用这条指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定义了_X86这个宏可以用下面的方法  
    #ifdef _X86  
    #pragma message(“_X86 macro activated!”)  
    #endif  
    当我们定义了_X86这个宏以后，应用程序在编译时就会在编译输出窗口里显示“_X86 macro activated!”。我们就不会因为不记得自己定义的一些特定的宏而抓耳挠腮了  
 
二. 另一个使用得比较多的#pragma参数是code_seg。格式如：  
   #pragma code_seg( [ [ { push | pop}, ] [ identifier, ] ] [ "segment-name" [, "segment-class" ] ) 
    该指令用来指定函数在.obj文件中存放的节,观察OBJ文件可以使用VC自带的dumpbin命令行程序,函数在.obj文件中默认的存放节为.text节。如果code_seg没有带参数的话,则函数存放在.text节中
    push (可选参数)将一个记录放到内部编译器的堆栈中,可选参数可以为一个标识符或者节名
    pop(可选参数) 将一个记录从堆栈顶端弹出,该记录可以为一个标识符或者节名
    identifier (可选参数) 当使用push指令时,为压入堆栈的记录指派的一个标识符,当该标识符被删除的时候和其相关的堆栈中的记录将被弹出堆栈 
    "segment-name" (]]></description>
		<author><![CDATA[hanshuyujifen]]></author>
		<pubDate>2008-10-23 23:47:00</pubDate>
		</item>
				<item>
		<title><![CDATA[雷劈数—腾讯QQ不敢发放的一个号码，附一段求雷劈数代码]]></title>
		<link>http://blog.pfan.cn/bclz/38483.html</link>
		<description><![CDATA[/*腾讯QQ不敢发放的一个号码&nbsp;---------内容&nbsp;&nbsp;大家先去查找60481729这个QQ。。。。。。&nbsp;&nbsp;怎么样？什么也查不到吧！为什么极其普通的一个号TX一直不敢放出来呢？&nbsp;&nbsp;首先得从这个号码的数字上分析原因。大家注意没？我把60481729这个QQ从&nbsp;&nbsp;中间分开，分成6048和1729两个数字。然后再相加。即6048+1729=7777，很&nbsp;&nbsp;不错的数字。还没完呢。继续。而7777?777=60481729，晕！怎么又回来了？&nbsp;&nbsp;？这个数字正是传说中的雷劈数！（印度某个数学家发现的，之所以叫雷劈&nbsp;&nbsp;数是因为在雷雨天气路边的里程桩号“3025”被雷从中间劈成2半而正好被这&nbsp;&nbsp;个科学家走狗屎运发现的，因为30+25=55，55?5=3025。偶上小学时候在中国&nbsp;&nbsp;少年报上看的，现在在网上根本找不到雷劈数得名的原因，嘎嘎装下B）而腾&nbsp;&nbsp;讯的老马脑子里还是带点迷性，当初放号的时候像这类非常不吉利的数字都&nbsp;&nbsp;给注销了，万一哪天被雷劈了他肯定会死不瞑目的。干事业还是得图个吉利，&nbsp;&nbsp;而当初申请8位QQ那段时间腾讯正处于困难时期，听说老马差点50万把QQ卖了，&nbsp;&nbsp;所以对于这些不吉利的东西还是予以避讳。但是老马的智商还是有限的，雷&nbsp;&nbsp;劈数不仅仅只有这一个，比如25502500，24502500，52881984，99980001都&nbsp;&nbsp;是雷劈数。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;求8位qq号码里边的雷劈数!&nbsp;&nbsp;&nbsp;&nbsp;时间:08-9-18&nbsp;13:24*/#include&nbsp;&lt;iostream&gt;#include&nbsp;&lt;cstdlib&gt;using&nbsp;namespace&nbsp;std;int&nbsp;main(){&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;m,n;&nbsp;&nbsp;&nbsp;&nbsp;int&nb]]></description>
		<author><![CDATA[hanshuyujifen]]></author>
		<pubDate>2008-09-24 15:39:00</pubDate>
		</item>
				<item>
		<title><![CDATA[pku2551解题报告]]></title>
		<link>http://blog.pfan.cn/bclz/38313.html</link>
		<description><![CDATA[//演算除法时可以发现规律//某个数不能被n整除时,余数乘以10+1是下一个数整除n时倒数第二位的余数//以7为例//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;___0_&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;___1__&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;___15_&nbsp;&nbsp;&nbsp;&nbsp;___158_&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__1587_&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;___15873__//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7/&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;7/&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;111&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;1111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;11111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;111111//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/-----&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/----7---&nbsp;&nbsp;&nbsp;&nbsp;/---&nbsp;7-&nbsp;&nbsp;&nbsp;/----7---&nbsp;&nbsp;&nbsp;/---7---&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;--7----//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n]]></description>
		<author><![CDATA[hanshuyujifen]]></author>
		<pubDate>2008-09-16 19:35:00</pubDate>
		</item>
				<item>
		<title><![CDATA[pku2505解题报告]]></title>
		<link>http://blog.pfan.cn/bclz/38279.html</link>
		<description><![CDATA[//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pku2505//&nbsp;&nbsp;&nbsp;&nbsp;题意:p的初始值为1,两人轮流对p乘以2`9中的一个数,谁先大于等于n谁就赢了//&nbsp;&nbsp;&nbsp;&nbsp;假设输入的数是Ｎ，如果＂我方＂想赢，则＂我方＂在赢之前必然达到这样一个数：//　　Ｎ/１８＜＝（Ｍ１）＜Ｎ/９．然而，对方是不会让＂我方＂达到Ｍ１的情况的，所以要求对方给出的//　　Ｍ２这个数应符合这样的条件：（Ｍ２）*２＜Ｎ／９&nbsp;&amp;&amp;（Ｍ２）*９＞＝Ｎ/１８．对方是不会甘心让//　　这个数在他手中出现的，所以＂我方＂给出的（Ｍ３）必须让对手无论怎样都能达到Ｍ２这样的要求，//　　所以满足:（Ｍ３）*９＜Ｎ/（９*２）&amp;&amp;&nbsp;Ｍ３）*２＞＝Ｎ／（１８*９），//&nbsp;&nbsp;&nbsp;&nbsp;即Ｎ/（１８*１８）＜＝（Ｍ３）＜Ｎ/（９*１８），在此我们走完了一个来回．//&nbsp;&nbsp;&nbsp;&nbsp;并且，我们从Ｍ１，Ｍ３的比较中可以知道：如果＂我方＂首先给出了一个在Ｎ不断除１８后的得到不足10的数Ｍ，//&nbsp;&nbsp;&nbsp;&nbsp;＂我方＂就可以取得胜利，并且双方都很聪明，所以这样胜负就决定于Ｎ了。//&nbsp;&nbsp;&nbsp;&nbsp;结论：如果Ｎ不断除１８后得到不足１８的数Ｍ，如果１＜Ｍ＜＝９则先手胜利，即stan　wins．//　　如果９＜Ｍ＜＝１８则后手胜利．////&nbsp;&nbsp;&nbsp;&nbsp;上述分析纯属抄袭.受益良多,遂转之.#include&nbsp;&lt;iostream&gt;using&nbsp;namespace&nbsp;std;int&nbsp;main(){&nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;n;&nbsp;&nbsp;&nbsp;&nbsp;while(cin&gt;&gt;n)&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(n&gt;18)&nbsp;&nbsp;&nbsp;&nbsp;]]></description>
		<author><![CDATA[hanshuyujifen]]></author>
		<pubDate>2008-09-15 22:12:00</pubDate>
		</item>
				<item>
		<title><![CDATA[memset用法详解]]></title>
		<link>http://blog.pfan.cn/bclz/38259.html</link>
		<description><![CDATA[memset用法详解memest原型(please&nbsp;type&nbsp;&quot;man&nbsp;memset&quot;&nbsp;in&nbsp;your&nbsp;shell)void&nbsp;*memset(void&nbsp;*s,&nbsp;int&nbsp;c,&nbsp;size_t&nbsp;n);memset:作用是在一段内存块中填充某个给定的值，它对较大的结构体或数组进行清零操作的一种最快方法。常见的三种错误第一:&nbsp;搞反了c&nbsp;和&nbsp;n的位置.一定要记住&nbsp;如果要把一个char&nbsp;a[20]清零,&nbsp;一定是&nbsp;memset(a,&nbsp;0,&nbsp;20)而不是&nbsp;memset(a,&nbsp;20,&nbsp;0)第二:&nbsp;过度使用memset,&nbsp;我想这些程序员可能有某种心理阴影,&nbsp;他们惧怕未经初始化的内存,&nbsp;所以他们会写出这样的代码:char&nbsp;buffer[20];memset(buffer,&nbsp;0,&nbsp;sizeof((char)*20));strcpy(buffer,&nbsp;&quot;123&quot;);这里的memset是多余的.&nbsp;因为这块内存马上就被覆盖了,&nbsp;清零没有意义.第三:&nbsp;其实这个错误严格来讲不能算用错memset,&nbsp;但是它经常在使用memset的场合出现int&nbsp;some_func(struct&nbsp;something&nbsp;*a){……memset(a,&nbsp;0,&nbsp;sizeof(a));…}问:为何要用memset置零?memset(&nbsp;&amp;Address,&nbsp;0,&nbsp;sizeof(Address))；经常看到这样的用法，其实不用的话，分配数据的时候，剩余的空间也会置零的。答:1.如果不清空，可能会在测试当中出现野值。&nbsp;你做下面的试验看看结果()char&nbsp;buf[5]；CString&nbsp;str,str1；&nbsp;//memset(buf,0,sizeof(buf))；&nbsp;for(int&nbsp;i&nbsp;=&nbsp;]]></description>
		<author><![CDATA[hanshuyujifen]]></author>
		<pubDate>2008-09-14 00:16:00</pubDate>
		</item>
				<item>
		<title><![CDATA[PKU1019解题报告]]></title>
		<link>http://blog.pfan.cn/bclz/38122.html</link>
		<description><![CDATA[PKU1019解题报告题目大意:一串数由1写道k.1&nbsp;12&nbsp;123&nbsp;1234&nbsp;12345&nbsp;123456&nbsp;1234567&nbsp;12345678&nbsp;123456789&nbsp;12345678910&nbsp;1234567891011初始时候k=1.写完一次后k增加1.重新从1写到k,以此循环.求这串数的第n位这串数的特征为:一个数比他的前一个数多了(int)log(10)+1位.其他完全相同第一个while()循环求出k;即k+1写完时,位数超过n.写完k时,位数不足n第二个while()循环求出i(i为1`k中的数字);要求第i+1个数写完时,位数超过n.第i个数时,位数不足n.从而求出i不知道这种方法叫什么.应该是逐步求精的思想吧.题目中使用函数log10()来求出一个数字的位数.log10在math.h&nbsp;中声明:形式为_CRTIMP&nbsp;double&nbsp;__cdecl&nbsp;log10&nbsp;(double);如果没有将其参数定义为double类型,将会编译错误.#include&nbsp;&lt;iostream&gt;#include&nbsp;&lt;cstdlib&gt;#include&nbsp;&lt;math.h&gt;using&nbsp;namespace&nbsp;std;int&nbsp;main(){&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;t;&nbsp;&nbsp;&nbsp;&nbsp;cin&gt;&gt;t;//第一行输入&nbsp;&nbsp;&nbsp;&nbsp;for(;t&gt;0;t--)&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;long&nbsp;int&nbsp;n;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin&gt;&gt;n;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;long&nbsp;int&nbsp;now]]></description>
		<author><![CDATA[hanshuyujifen]]></author>
		<pubDate>2008-09-06 11:39:00</pubDate>
		</item>
				<item>
		<title><![CDATA[pku3302结题报告]]></title>
		<link>http://blog.pfan.cn/bclz/37836.html</link>
		<description><![CDATA[pku3302结题报告水题一个题目要求:给出两个字符串,s和sub判断s是否包含了sub.包含是指s中含有sub的所有元素,并且在s中按照在sub的顺序或者逆序排列.类似于串的模式匹配问题#include&nbsp;&lt;iostream&gt;using&nbsp;namespace&nbsp;std;int&nbsp;main(){&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;s[100];&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;sub[100];&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;t;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i=0,j=0,k=0;&nbsp;&nbsp;&nbsp;&nbsp;bool&nbsp;ok=1;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;cur=0;&nbsp;&nbsp;&nbsp;&nbsp;cin&gt;&gt;t;&nbsp;&nbsp;&nbsp;&nbsp;for(k=0;k&lt;t;k++)&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin&gt;&gt;s&gt;&gt;sub;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;len1=strlen(s);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;len2=strlen(sub);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i=0;j=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(i&lt;len1&amp;&amp;j&lt;len2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{//正向查找&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp]]></description>
		<author><![CDATA[hanshuyujifen]]></author>
		<pubDate>2008-08-24 10:09:00</pubDate>
		</item>
				<item>
		<title><![CDATA[pku3650解题报告]]></title>
		<link>http://blog.pfan.cn/bclz/37825.html</link>
		<description><![CDATA[pku3650解题报告超级水题将几个字符替换掉&quot;&nbsp;&quot;&nbsp;(space)&nbsp;替换成%20&quot;!&quot;&nbsp;(exclamation&nbsp;point)&nbsp;替换成%21&quot;$&quot;&nbsp;(dollar&nbsp;sign)&nbsp;替换成%24&quot;%&quot;&nbsp;(percent&nbsp;sign)&nbsp;替换成%25&quot;(&quot;&nbsp;(left&nbsp;parenthesis)&nbsp;替换成%28&quot;)&quot;&nbsp;(right&nbsp;parenthesis)&nbsp;替换成%29&quot;*&quot;&nbsp;(asterisk)&nbsp;替换成%2a注意输入带空格的字符串时,可以用gets()函数获取一行.cin和scanf不行.#include&nbsp;&lt;iostream&gt;using&nbsp;namespace&nbsp;std;int&nbsp;main(){&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;str[80];&nbsp;&nbsp;&nbsp;&nbsp;memset(str,0,strlen(str));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(gets(str))//获取一行输入&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(str[0]==&#39;#&#39;)//最后一行只有一个&quot;#&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;//输入#时结束.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&]]></description>
		<author><![CDATA[hanshuyujifen]]></author>
		<pubDate>2008-08-23 22:37:00</pubDate>
		</item>
				<item>
		<title><![CDATA[PKU&nbsp;1047解题报告(原创)]]></title>
		<link>http://blog.pfan.cn/bclz/37702.html</link>
		<description><![CDATA[PKU&nbsp;1047解题报告(原创)题目:Round&nbsp;and&nbsp;Round&nbsp;We&nbsp;Go104708-8-17题目大意:判断一个数是否为cyclic数.一个数为cyclic的条件为:设数为n位数.那么原数乘以1~n所得的结果可以通过原来的数移位得到.由于刚做完一个大数乘法的题,使用了对大数的处理方法.一次AC!比如&nbsp;&nbsp;142857&nbsp;*1&nbsp;=&nbsp;142857142857&nbsp;*2&nbsp;=&nbsp;285714142857&nbsp;*3&nbsp;=&nbsp;428571142857&nbsp;*4&nbsp;=&nbsp;571428142857&nbsp;*5&nbsp;=&nbsp;714285142857&nbsp;*6&nbsp;=&nbsp;857142142857就是一个cyclic数.DescriptionA&nbsp;cyclic&nbsp;number&nbsp;is&nbsp;an&nbsp;integer&nbsp;n&nbsp;digits&nbsp;in&nbsp;length&nbsp;which,&nbsp;when&nbsp;multiplied&nbsp;by&nbsp;any&nbsp;integer&nbsp;from&nbsp;1&nbsp;to&nbsp;n,&nbsp;yields&nbsp;a&quot;cycle&quot;of&nbsp;the&nbsp;digits&nbsp;of&nbsp;the&nbsp;original&nbsp;number.&nbsp;That&nbsp;is,&nbsp;if&nbsp;you&nbsp;consider&nbsp;the&nbsp;number&nbsp;after&nbsp;the&nbsp;last&nbsp;digit&nbsp;to&nbsp;&quot;wrap&nbsp;around&quot;back&nbsp;to&nbsp;the&nbsp;first&nbsp;digit,&nbsp;the&nbsp;sequence&nbsp;of&nbsp;digits&nbsp;in&nbsp;both&nbsp;numbers&nbsp;will&nb]]></description>
		<author><![CDATA[hanshuyujifen]]></author>
		<pubDate>2008-08-18 22:29:00</pubDate>
		</item>
				<item>
		<title><![CDATA[励志]]></title>
		<link>http://blog.pfan.cn/bclz/37650.html</link>
		<description><![CDATA[看我一年前写的东西,发现我确实有一点进步.看我现在写的东西,发现我还是什么都不会!中间浪费一年在工作上边,值吗?工作,考试什么狗屁东西!一般滚着去吧!我不爱我的工作,却又无法辞职!我爱编程!我要成高手!不断地学习,算法、语法!用心看别人写的程序，快点提高！没时间了！老张！看着一帮年纪小小的人，写出那么好的东西！我发现我欠缺太多太多了！用心看每一页书，不再追求多！走马观花学不到任何东西！努力！为了我自己和我最爱的人！努力，为了房子为了将来的孩子！]]></description>
		<author><![CDATA[hanshuyujifen]]></author>
		<pubDate>2008-08-16 11:06:00</pubDate>
		</item>
				<item>
		<title><![CDATA[Eratosthenes筛法求1-100之间的素数]]></title>
		<link>http://blog.pfan.cn/bclz/37462.html</link>
		<description><![CDATA[/*写出不超过100的所有的素数。解&nbsp;&nbsp;将不超过100的正整数排列如下：&nbsp;1&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;1011&nbsp;&nbsp;12&nbsp;&nbsp;13&nbsp;&nbsp;14&nbsp;&nbsp;15&nbsp;&nbsp;16&nbsp;&nbsp;17&nbsp;&nbsp;18&nbsp;&nbsp;19&nbsp;&nbsp;2021&nbsp;&nbsp;22&nbsp;&nbsp;23&nbsp;&nbsp;24&nbsp;&nbsp;25&nbsp;&nbsp;26&nbsp;&nbsp;27&nbsp;&nbsp;28&nbsp;&nbsp;29&nbsp;&nbsp;3031&nbsp;&nbsp;32&nbsp;&nbsp;33&nbsp;&nbsp;34&nbsp;&nbsp;35&nbsp;&nbsp;36&nbsp;&nbsp;37&nbsp;&nbsp;38&nbsp;&nbsp;39&nbsp;&nbsp;4041&nbsp;&nbsp;42&nbsp;&nbsp;43&nbsp;&nbsp;44&nbsp;&nbsp;45&nbsp;&nbsp;46&nbsp;&nbsp;47&nbsp;&nbsp;48&nbsp;&nbsp;49&nbsp;&nbsp;5051&nbsp;&nbsp;52&nbsp;&nbsp;53&nbsp;&nbsp;54&nbsp;&nbsp;55&nbsp;&nbsp;56&nbsp;&nbsp;57&nbsp;&nbsp;58&nbsp;&nbsp;59&nbsp;&nbsp;6061&nbsp;&nbsp;62&nbsp;&nbsp;63&nbsp;&nbsp;64&nbsp;&nbsp;65&nbsp;&nbsp;66&nbsp;&nbsp;67&nbsp;&nbsp;68&nbsp;&nbsp;69&nbsp;&nbsp;7071&nbsp;&nbsp]]></description>
		<author><![CDATA[hanshuyujifen]]></author>
		<pubDate>2008-08-10 13:03:00</pubDate>
		</item>
				<item>
		<title><![CDATA[【转载】&nbsp;解读传说中计算π的超牛的C程序]]></title>
		<link>http://blog.pfan.cn/bclz/37434.html</link>
		<description><![CDATA[解读传说中计算π的超牛的C程序在我上大学的时候就流传着这样一个超牛的C程序，只用三行代码就能计算π到小数点后800位，还有的地方开玩笑说是外星人写的，的确是牛的不得了。那个时候大家一起研究都搞不懂，昨天看了一篇文章解释这段代码，今天自己试验了很久，终于弄明白了，所以记下来和大家一起交流。这段C代码是这样的：#include&nbsp;&quot;stdio.h&quot;long&nbsp;a=10000,&nbsp;b,&nbsp;c=2800,&nbsp;d,&nbsp;e,&nbsp;f[2801],&nbsp;g;void&nbsp;main()&nbsp;{for(&nbsp;;b-c;&nbsp;)&nbsp;f[b++]&nbsp;=a/5;for(&nbsp;;&nbsp;d=0,&nbsp;g=c*2;&nbsp;c-=14,printf(&quot;%.4d&quot;,e+d/a),e=d%a)for(b=c;&nbsp;d+=f[b]*a,f[b]&nbsp;=d%--g,d/=g--,--b;&nbsp;d*=b)&nbsp;;}我把解释这段代码的文章附在最后面了，作者叫王聪，看他的博客是很高手的样子。我的主要分析都是从他的文章里看到的。谢谢这位高手！这么多年的疑惑终于解开了。从我的角度来理解，我不习惯把for语句拆开变成while来分析，我觉着现在这个样子就挺好的，当然个别语句还是要调整一下。我觉得说明以下几个问题就能完全搞明白了：算法（两点）、错误（两点）、其他（四点）。一、算法1、π的计算公式π/2=1+1!/3!!+2!/5!!+3!/7!!+...+k!/(2*k+1)!!+...这个公式不记得了，好像是高数里学过。注：5!=1*2*3*4*5，5!!=1*3*52、公式的程序实现（数组存储余数）把上面的公式做一下展开和调整π/2&nbsp;=&nbsp;1&nbsp;+&nbsp;1!/3!!&nbsp;+&nbsp;2!/5!!&nbsp;+&nbsp;3!/7!!&nbsp;+&nbsp;...&nbsp;+&nbsp;k!/(2*k+1)!!=&nbsp;1&nbsp;+&nbsp;1/3&nbsp;+&nbsp;(1*2)/(3*5)&nbsp;+&nbsp;(1*2*3)/(3*5*7)&nbsp;+&nbsp;...]]></description>
		<author><![CDATA[hanshuyujifen]]></author>
		<pubDate>2008-08-09 01:22:00</pubDate>
		</item>
				<item>
		<title><![CDATA[标准C++处理for循环作用域规则]]></title>
		<link>http://blog.pfan.cn/bclz/37407.html</link>
		<description><![CDATA[C++处理for循环作用域规则&nbsp;&nbsp;&nbsp;在&nbsp;C++&nbsp;标准制定之前，在&nbsp;for&nbsp;循环中声明的变量在循环外也可以访问。例如：for(intn=0;&nbsp;n〈MAX;++n)　　&nbsp;{　　//..do&nbsp;something　　&nbsp;}　　++n;//OK&nbsp;in&nbsp;pre-standard&nbsp;C++;&nbsp;illegal&nbsp;in&nbsp;ISO&nbsp;C++然而，在&nbsp;ISO&nbsp;C++&nbsp;中，for&nbsp;循环变量的作用域被限制为循环本身。虽然这一改变不可否认地具有其意义，但是它却影响到了老代码以及新代码。下面我将示范一些迁移技术帮助你处理这一改动。遗留代码对于那些使用标准制定之前的作用域规则的遗留代码，如果使用与标准兼容的编译器编译它们，那么就有可能出现错误。解决这一问题的最好方法是修改代码。但是，代码修正需要彻底测试，而且有时候还会招致一连串的缺陷和编译错误。如果不想处理这一难于解决的问题，同时又希望升级编译器，那么不妨检查一下能否有办法恢复标准制定之前&nbsp;for&nbsp;循环变量的行为。如果确实使用了这种变量，那么打开这个选项，然后（使用注释）明确地在代码记下这一事实，以使将来的程序员知道如何正确地编译这一代码。If&nbsp;you&#39;re&nbsp;wary&nbsp;of&nbsp;relying&nbsp;on&nbsp;compilers&#39;favors,&nbsp;there&#39;s&nbsp;an&nbsp;alternative&nbsp;patch:&nbsp;move&nbsp;the&nbsp;variable&#39;s&nbsp;definition&nbsp;outside&nbsp;thefor-loop:　　//如果不愿依赖编译器的帮助，那么还有一种替代方案：将变量的定义移至&nbsp;for&nbsp;循环之外：　　intn=0;//originally&nbsp;was&nbsp;inside&nbsp;the&nbsp;for&nbsp;loop　　for(/*n&nbsp;was&nbsp;here*/;&nbsp;n〈MAX;++n)　]]></description>
		<author><![CDATA[hanshuyujifen]]></author>
		<pubDate>2008-08-07 14:20:00</pubDate>
		</item>
				<item>
		<title><![CDATA[二维数组动态分配内存]]></title>
		<link>http://blog.pfan.cn/bclz/37399.html</link>
		<description><![CDATA[如果使用以下方式分配，将无法通过编译double&nbsp;*&nbsp;x;x=new&nbsp;double[10][10];原因是new没有分配多维数组的能力。可以直接new&nbsp;double[100]分配一个一维数组来代替两维的，用的时候做一下下标转换即可。或者也可以分配一个指针数组，再为每一个指针分配一个数组来实现两维的堆内存分配。也可以用如下形式：A=new&nbsp;int*[10];for(int&nbsp;i=0;i&lt;10;i++)A[i]=new&nbsp;int[10];注意：二维数组的头指针是一个指针的指针,也就是double**,int**...所以必须分配两次.所以例子中A的类型应声明为int**.]]></description>
		<author><![CDATA[hanshuyujifen]]></author>
		<pubDate>2008-08-06 21:28:00</pubDate>
		</item>
		</channel>
</rss>