<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_this.Study(DateTime.Now)</title><subtitle type="text">专业因为专注(周银辉的开发博客)</subtitle><id>http://feed.cnblogs.com/blog/u/18579/rss</id><updated>2011-10-16T08:08:10Z</updated><author><name>周银辉</name><uri>http://www.cnblogs.com/zhouyinhui/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/zhouyinhui/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/18579/rss"/><entry><id>http://www.cnblogs.com/zhouyinhui/archive/2011/07/25/2116154.html</id><title type="text">Linux进程相关的一些笔记</title><summary type="text">这段时间学习了一些Linux进程以及进程间通信（IPC），将其整理了一下，打包下载....</summary><published>2011-07-25T06:29:00Z</published><updated>2011-07-25T06:29:00Z</updated><author><name>周银辉</name><uri>http://www.cnblogs.com/zhouyinhui/</uri></author><link rel="alternate" href="http://www.cnblogs.com/zhouyinhui/archive/2011/07/25/2116154.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/zhouyinhui/archive/2011/07/25/2116154.html"/><content type="html">&lt;p&gt;Linux&lt;strong&gt;进程相关的一些笔记&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;周银辉&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;跑去搞医疗CT了，接触到的都是Linux， 这段时间学习了一些Linux进程以及进程间通信（IPC），将其整理了一下，有四十多页，不便直接贴成博文，那就打包下载吧。&amp;nbsp;&lt;/p&gt;&lt;p&gt;下载地址：&amp;nbsp;&lt;a href="http://files.cnblogs.com/zhouyinhui/processNotes.zip"&gt;http://files.cnblogs.com/zhouyinhui/processNotes.zip&lt;/a&gt;&lt;/p&gt;&lt;p&gt;我是Linux新手，所以笔记中难免有理解得不到位甚至错误的地方，若发现，淡定地留言便可，我改...&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/zhouyinhui/aggbug/2116154.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/zhouyinhui/archive/2011/07/25/2116154.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/zhouyinhui/archive/2011/04/20/2023016.html</id><title type="text">[Project Euler] 来做欧拉项目练习题吧: 题目020</title><summary type="text">求100!所得结果的各位数字之和</summary><published>2011-04-20T14:58:00Z</published><updated>2011-04-20T14:58:00Z</updated><author><name>周银辉</name><uri>http://www.cnblogs.com/zhouyinhui/</uri></author><link rel="alternate" href="http://www.cnblogs.com/zhouyinhui/archive/2011/04/20/2023016.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/zhouyinhui/archive/2011/04/20/2023016.html"/><content type="html">&lt;p&gt;[Project Euler] 来做欧拉项目练习题吧: 题目020&lt;/p&gt;&lt;p&gt;周银辉　&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;题目描述:&lt;/p&gt;&lt;div&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;p&gt;&lt;em&gt;n&lt;/em&gt;! means&amp;nbsp;&lt;em&gt;n&lt;/em&gt;&amp;nbsp;x&amp;nbsp;(&lt;em&gt;n&lt;/em&gt;&amp;nbsp;&lt;img src="http://projecteuler.net/images/symbol_minus.gif" width="9" height="3" alt="&amp;#8722;" border="0" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /&gt;&amp;nbsp;1) x&amp;nbsp;... x&amp;nbsp;3 x&amp;nbsp;2 x&amp;nbsp;1&lt;/p&gt;&lt;p&gt;For example, 10! = 10 x&amp;nbsp;9 x&amp;nbsp;... x&amp;nbsp;3 x&amp;nbsp;2 x&amp;nbsp;1 = 3628800,&lt;br /&gt;and the sum of the digits in the number 10! is 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27.&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;span  style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;Find the sum of the digits in the number 100!&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;题目分析:&lt;/p&gt;&lt;p&gt;求100!所得结果的各位数字之和&lt;/p&gt;&lt;div&gt;  &lt;title&gt;&lt;/title&gt;      &lt;p&gt;做法可以有两种：&lt;/p&gt; &lt;p&gt;一是做大数乗法，对于Java内置了BigInteger，或者Scheme可以实现无限精度的语言而已，问题就很简单。&lt;/p&gt; &lt;/div&gt;&lt;p&gt;否则自己模拟大数乗法，正如下面的multiply。&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;div&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/div&gt;&lt;div&gt;#include &amp;lt;math.h&amp;gt;&lt;/div&gt;&lt;div&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;/div&gt;&lt;div&gt;#include &amp;lt;string.h&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;#define BF_SZ 1000 //buffer size&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;//将整数转换成字符串，并传出长度, 请手动释放返回值&lt;/div&gt;&lt;div&gt;//stdlib中的itoa也能完成类似的功能，&lt;/div&gt;&lt;div&gt;//但stdlib传入的buffer长度未知，一般会设置得比较大，而造成浪费&lt;/div&gt;&lt;div&gt;char* int_to_str(int n, int* length)&lt;/div&gt;&lt;div&gt;{&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;*length = floor(log10(abs(n!=0?n:1))) + 1;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;char *str = (char*)calloc(sizeof(char)*(*length+1));&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;int i = *length-1;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;while(n!=0)&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;str[i] = n%10+48;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;n = n/10;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;i--;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;return str;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;//大数乗法，结果放在r中&lt;/div&gt;&lt;div&gt;void multiply(const char *a,const char *b, char *r)&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;int i, j, *t, length_a, length_b, length_t; // t for temp&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;length_a = strlen(a);&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;length_b = strlen(b);&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;length_t = length_a + length_b;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;t=(int*)malloc(sizeof(int)*length_t);&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;for(i=0; i&amp;lt;length_t; i++)&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;t[i]=0;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;for (i=0; i&amp;lt;length_a; i++)&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;for (j=0;j&amp;lt;length_b;j++)&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;t[i+j+1] += (a[i]-48)*(b[j]-48);&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;// 这里实现进位操作&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;for (i=length_t-1; i&amp;gt;=0; i--) &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;if(t[i]&amp;gt;=10)&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;t[i-1] += t[i]/10;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;t[i] &amp;nbsp; %= 10;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;i=0;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;while(t[i]==0)&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;i++; &amp;nbsp; // 跳过数前面的0&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;for (j=0; i&amp;lt;length_t; i++,j++)&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;r[j] = t[i]+48;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;r[j]='\0';&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;free(t);&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;int test(int n, char* buffer, char* temp)&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;int i, j, k, a, b, c, p; //p for product&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;int len;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;for(i=2; i&amp;lt;=n; i++)&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;char *str = int_to_str(i, &amp;amp;len);&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;//printf("%s\t", str);&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;//做buffer和str的大数乘法&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;multiply(buffer, str, buffer);&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;free(str);&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;return 0;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;int main()&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;char* buffer = (char*)malloc(BF_SZ*sizeof(char));&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;char* temp &amp;nbsp; = (char*)malloc(BF_SZ* sizeof(char));&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;memset(buffer, '0', BF_SZ);&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;buffer[BF_SZ-1] = '1';&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;memset(temp, '0', BF_SZ);&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;test(100, buffer, temp);&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;printf("buffer is %s\n", buffer);&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;int i, len=strlen(buffer), count=0;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;for (i=0; i&amp;lt;len; i++)&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;count += buffer[i]-48;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;printf("the count is %d\n", count);&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;free(buffer);&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;free(temp);&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;return 0;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;}&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;二是做大数阶乘：&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/div&gt;&lt;div&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;int buffer[1000];&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;void multiply(int buffer[],int n,int *length)&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;int c=0, i, len=*length;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;for(i=0; i&amp;lt;len; i++)&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;buffer[i] = buffer[i]*n + c;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = buffer[i]/10;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;buffer[i]%=10;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;while(c!=0)&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;buffer[len++] = c%10;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;c /= 10;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;*length=len;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;main()&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;buffer[0]=1;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;int i, n=100, len=1;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;for(i=2; i&amp;lt;=n; i++)&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;multiply(buffer, i, &amp;amp;len);&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;for(i=len-1; i&amp;gt;=0; i--)&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;printf("%d",buffer[i]);&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;printf("\n");&lt;/div&gt;&lt;/div&gt;&lt;p&gt;}&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;这种模拟大数运算的题目要求细心和耐性,其它便没什么了&lt;/p&gt;&lt;img src="http://www.cnblogs.com/zhouyinhui/aggbug/2023016.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/zhouyinhui/archive/2011/04/20/2023016.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/zhouyinhui/archive/2011/04/19/2021468.html</id><title type="text">[Project Euler] 来做欧拉项目练习题吧: 题目019</title><summary type="text">计算从1901年到2000年间，有多少个星期天是在月初</summary><published>2011-04-19T12:38:00Z</published><updated>2011-04-19T12:38:00Z</updated><author><name>周银辉</name><uri>http://www.cnblogs.com/zhouyinhui/</uri></author><link rel="alternate" href="http://www.cnblogs.com/zhouyinhui/archive/2011/04/19/2021468.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/zhouyinhui/archive/2011/04/19/2021468.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&amp;nbsp;[Project Euler] 来做欧拉项目练习题吧: 题目019&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;周银辉&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;题目描述:&lt;/p&gt;&lt;div&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;p&gt;You are given the following information, but you may prefer to do some research for yourself.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;1 Jan 1900 was a Monday.&lt;/li&gt;&lt;li&gt;Thirty days has September,&lt;br /&gt;April, June and November.&lt;br /&gt;All the rest have thirty-one,&lt;br /&gt;Saving February alone,&lt;br /&gt;Which has twenty-eight, rain or shine.&lt;br /&gt;And on leap years, twenty-nine.&lt;/li&gt;&lt;li&gt;A leap year occurs on any year evenly divisible by 4, but not on a century unless it is divisible by 400.&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;span  style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;How many Sundays fell on the first of the month during the twentieth century (1 Jan 1901 to 31 Dec 2000)?&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;问题分析:&lt;/p&gt;&lt;div&gt;  &lt;title&gt;&lt;/title&gt;      &lt;p&gt;计算从1901年到2000年间，有多少个星期天是在月初。&lt;/p&gt; &lt;p&gt;题目说1900年1月1日是星期一，也就是说1900年1月7日是星期天，那么从这天开始每增加7天都是星期天。&lt;/p&gt; &lt;p&gt;然后问题就转换成了这些星期天中哪些是在月初。&lt;/p&gt; &lt;p&gt;高级语言都内置了日期函数，如果用类似于date.addDays(n)之类的函数，这个问题就变得非常简单了。&lt;/p&gt; &lt;/div&gt;&lt;p&gt;不使用内置函数的话，就用下面的get_days和get_date方法吧:&lt;/p&gt;&lt;div&gt;&lt;div&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;long get_days(long y, long m, long d)&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;m = (m + 9)%12; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* mar=0, feb=11 */&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;y = y - m/10; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* if Jan/Feb, year-- */&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;return y*365 + y/4 - y/100 + y/400 + (m*306 + 5)/10 + (d - 1);&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;void get_date(long days, long* y, long* m, long* d)&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;long yy, ddd, mm, dd, mi;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;yy = (10000*days + 14780)/3652425;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;ddd = days - (yy*365 + yy/4 - yy/100 + yy/400);&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;if (ddd &amp;lt; 0)&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;yy--;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;ddd = days - (yy*365 + yy/4 - yy/100 + yy/400);&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;mi = (52 + 100*ddd)/3060;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;*y = yy + (mi + 2)/12;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;*m = (mi + 2)%12 + 1;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;*d = ddd - (mi*306 + 5)/10 + 1;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;int main()&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;long count = 0;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;long year &amp;nbsp;= 1900;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;long month;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;long day;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;long days = get_days(1900, 1, 7);&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;while(1)&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;days += 7; //增加7天，肯定是星期天&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;//取得该天的日期，判断其是否是1号&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;get_date(days, &amp;amp;year, &amp;amp;month, &amp;amp;day);&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;//printf("%ld-%ld-%ld\n", year, month, day);&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;if (year&amp;gt;2000)&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;break;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;}&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;if(day==1 &amp;amp;&amp;amp; year&amp;gt;=1901)&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;//今天是1号，那么至少要等28天以后才可能是1号了，下次循环是要加7天，所以这里加21天&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;//避免无用的运算&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;days &amp;nbsp;+= 21;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;count ++;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;printf("total count %ld\n", count);&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;return 0;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;}&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;此题几乎不需要多少时间:&lt;br /&gt;&lt;div&gt;&lt;div&gt;real &amp;nbsp; &amp;nbsp;0m0.005s&lt;/div&gt;&lt;div&gt;user &amp;nbsp; &amp;nbsp;0m0.001s&lt;/div&gt;&lt;/div&gt;sys &amp;nbsp; &amp;nbsp; 0m0.003s&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/zhouyinhui/aggbug/2021468.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/zhouyinhui/archive/2011/04/19/2021468.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/zhouyinhui/archive/2011/03/29/1999255.html</id><title type="text">[Project Euler] 来做欧拉项目练习题吧: 题目018</title><summary type="text">给定数塔中，求从上到下所有路径中节点之和的最大值</summary><published>2011-03-29T14:28:00Z</published><updated>2011-03-29T14:28:00Z</updated><author><name>周银辉</name><uri>http://www.cnblogs.com/zhouyinhui/</uri></author><link rel="alternate" href="http://www.cnblogs.com/zhouyinhui/archive/2011/03/29/1999255.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/zhouyinhui/archive/2011/03/29/1999255.html"/><content type="html">&lt;p&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;strong&gt;&amp;nbsp;[Project Euler] 来做欧拉项目练习题吧: 题目018&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 周银辉&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;问题描述：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;div&gt;&lt;p style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;By starting at the top of the triangle below and moving to adjacent numbers on the row below, the maximum total from top to bottom is 23.&lt;/span&gt;&lt;/p&gt;&lt;p style="line-height: normal; text-align: center; font-family: 'courier new'; font-size: 12pt; "&gt;&lt;span style="color: #ff0000; font-family: Courier; font-size: 10pt; "&gt;&lt;strong&gt;3&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #ff0000; font-family: Courier; font-size: 10pt; "&gt;&lt;strong&gt;7&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;&amp;nbsp;4&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;2&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000; font-family: Courier; font-size: 10pt; "&gt;&lt;strong&gt;4&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;&amp;nbsp;6&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;8 5&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000; font-family: Courier; font-size: 10pt; "&gt;&lt;strong&gt;9&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;&amp;nbsp;3&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;That is, 3 + 7 + 4 + 9 = 23.&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;Find the maximum total from top to bottom of the triangle below:&lt;/span&gt;&lt;/p&gt;&lt;p style="font-size: 16px; line-height: normal; text-align: center; font-family: 'courier new'; "&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;75&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;95 64&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;17 47 82&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;18 35 87 10&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;20 04 82 47 65&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;19 01 23 75 03 34&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;88 02 77 73 07 63 67&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;99 65 04 28 06 16 70 92&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;41 41 26 56 83 40 80 70 33&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;41 48 72 33 47 32 37 16 94 29&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;53 71 44 65 25 43 91 52 97 51 14&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;70 11 33 28 77 73 17 78 39 68 17 57&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;91 71 52 38 17 14 91 43 58 50 27 29 48&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;63 66 04 68 89 53 67 30 73 16 69 87 40 31&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;04 62 98 27 23 09 70 98 73 93 38 53 60 04 23&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: 'Trebuchet MS', sans-serif; line-height: normal; font-weight: normal; font-size: 13px; "&gt;&lt;strong style="font-family: Courier; font-size: 10pt; "&gt;NOTE:&lt;/strong&gt;&amp;nbsp;As there are only 16384 routes, it is possible to solve this problem by trying every route. However,&amp;nbsp;&lt;a href="http://projecteuler.net/index.php?section=problems&amp;amp;id=67" style="text-decoration: none; color: #676c9c; "&gt;Problem 67&lt;/a&gt;, is the same challenge with a triangle containing one-hundred rows; it cannot be solved by brute force, and requires a clever method!&amp;nbsp;&lt;/p&gt;&lt;p style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;/p&gt;&lt;p style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;/p&gt;&lt;p style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;问题分析：&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;div&gt;&lt;div&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;题目中数据看上去是一个三角形，但由于题目要求的是从一个点出发沿着其相邻的两个点向下一行前进，点和其下一行相邻的两个点刚好构成一个二叉树。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;设A[i,j]表示第i行的第j个数，那么A[i,j]相邻的两个点就是A[i+1,j]和A[i+1,j+1]，也就是它的左右子树。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;变化成二叉树就好办了.设best[A]表示以点A出发点并且满足题目要求的运算结果，节点A在数组中对应的数值为(A)， 节点A的左右子树分别为B和C，&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;那么best[A] = (A) + max(best[B], best[C])， 呵呵，递归的&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;（参考代码中的buffer是为了避免重复递归运算而设置的缓冲区&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;&amp;nbsp;)&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;#define SZ 15&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;#define END (SZ-1)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;int data[SZ][SZ] =&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{75},&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{95, 64},&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{17, 47, 82},&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{18, 35, 87, 10},&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{20, &amp;nbsp;4, 82, 47, 65},&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{19, &amp;nbsp;1, 23, 75, &amp;nbsp;3, 34},&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{88, &amp;nbsp;2, 77, 73, &amp;nbsp;7, 63, 67},&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{99, 65, &amp;nbsp;4, 28, &amp;nbsp;6, 16, 70, 92},&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{41, 41, 26, 56, 83, 40, 80, 70, 33},&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{41, 48, 72, 33, 47, 32, 37, 16, 94, 29},&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{53, 71, 44, 65, 25, 43, 91, 52, 97, 51, 14},&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{70, 11, 33, 28, 77, 73, 17, 78, 39, 68, 17, 57},&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{91, 71, 52, 38, 17, 14, 91, 43, 58, 50, 27, 29, 48},&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{63, 66, &amp;nbsp;4, 68, 89, 53, 67, 30, 73, 16, 69, 87, 40, 31},&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{ 4, 62, 98, 27, 23, &amp;nbsp;9, 70, 98, 73, 93, 38, 53, 60, &amp;nbsp;4, 23}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;};&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;int buffer[SZ][SZ];&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;int test(int i, int j)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;if(j&amp;gt;i) //j&amp;gt;i时是上面数组中没有显式标明数字的那些区域，不参与运算&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;return 0;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;int sum, sumLeft=0, sumRight=0, ni, nj; // ni: next i&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;int currentNode;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre; line-height: normal;"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;currentNode = data[i][j];&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;if(i==END)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;return currentNode;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;ni = i+1;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;nj = j+1;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;if(ni&amp;lt;SZ)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;if(buffer[ni][j] != 0)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;sumLeft = buffer[ni][j];&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;else&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;sumLeft = test(ni, j);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;buffer[ni][j] = sumLeft;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;if(nj&amp;lt;SZ)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;if(buffer[ni][nj] != 0)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;sumRight = buffer[ni][nj];&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;else&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;sumRight = test(ni, nj);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;buffer[ni][nj] = sumRight;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;sum = currentNode + (sumLeft&amp;gt;sumRight ? sumLeft:sumRight);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;buffer[i][j] = sum;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;return sum;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;int main()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;printf("result is %d\n", test(0,0));&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre; line-height: normal;"&gt;		&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;return 0;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;font  face="'Trebuchet MS', sans-serif" size="3"&gt;&lt;span  style="line-height: normal; "&gt;&lt;span  style="font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;速度还不错（intel 双核2.4G）：&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;real &amp;nbsp; &amp;nbsp;0m0.004s&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;user &amp;nbsp; &amp;nbsp;0m0.001s&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;sys &amp;nbsp; &amp;nbsp; 0m0.003s&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/zhouyinhui/aggbug/1999255.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/zhouyinhui/archive/2011/03/29/1999255.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/zhouyinhui/archive/2011/03/03/1970233.html</id><title type="text">[Project Euler] 来做欧拉项目练习题吧: 题目017</title><summary type="text">把数转换成英文,然后求字符个数</summary><published>2011-03-03T11:56:00Z</published><updated>2011-03-03T11:56:00Z</updated><author><name>周银辉</name><uri>http://www.cnblogs.com/zhouyinhui/</uri></author><link rel="alternate" href="http://www.cnblogs.com/zhouyinhui/archive/2011/03/03/1970233.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/zhouyinhui/archive/2011/03/03/1970233.html"/><content type="html">&lt;p&gt;&lt;span style="font-family: Courier; font-size: 12pt; "&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;strong style="font-family: Courier; font-size: 12pt; "&gt;[Project Euler] 来做欧拉项目练习题吧: 题目017&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Courier; font-size: 12pt; "&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;周银辉&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Courier; font-size: 12pt; "&gt;&lt;strong&gt;题目描述:&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;div&gt;&lt;p style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;span style="font-family: Courier; font-size: 12pt; "&gt;If the numbers 1 to 5 are written out in words: one, two, three, four, five, then there are 3 + 3 + 5 + 4 + 4 = 19 letters used in total.&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;span style="font-family: Courier; font-size: 12pt; "&gt;If all the numbers from 1 to 1000 (one thousand) inclusive were written out in words, how many letters would be used?&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="font-weight: normal; font-size: 13px; font-family: 'Trebuchet MS', sans-serif; line-height: normal; "&gt;&lt;strong style="font-family: Courier; font-size: 12pt; "&gt;NOTE:&lt;/strong&gt;&amp;nbsp;Do not count spaces or hyphens. For example, 342 (three hundred and forty-two) contains 23 letters and 115 (one hundred and fifteen) contains 20 letters. The use of "and" when writing out numbers is in compliance with British usage.&lt;/p&gt;&lt;p style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;/p&gt;&lt;p style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;span style="font-family: Courier; font-size: 12pt; "&gt;&lt;strong&gt;问题分析:&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;span style="font-family: Courier; font-size: 12pt; "&gt;这个题目比较简单哈&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 12pt; "&gt;，用铅笔和纸也比如容易算出啦。比如计算单个数字的出现次数，"hundred"单词出现的次数等等。&lt;/span&gt;&lt;div&gt;  &lt;title&gt;&lt;/title&gt;       &lt;p&gt;&lt;span style="font-family: Courier; font-size: 12pt; "&gt;而用程序计算嘛，关键在于创建一个数字和对应单词长度的映射，也就是上面numbers那个数组。&lt;/span&gt;&lt;/p&gt; &lt;/div&gt;&lt;span style="font-family: Courier; font-size: 12pt; "&gt;然后分离出百位数、十位数、个位数，以及处理各种特殊情况就可以了。&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;int numbers[91];&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;void ini_numbers()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;//为了节省空间，用hash_map也可以&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;numbers[0] = 0;//no pronunciation for zero&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;numbers[1] = 3;//"one"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;numbers[2] = 3;//"two"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;numbers[3] = 5;//"three"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;numbers[4] = 4;//"four"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;numbers[5] = 4;//"five"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;numbers[6] = 3;//"six"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;numbers[7] = 5;//"seven"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;numbers[8] = 5;//"eight"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;numbers[9] = 4;//"nine"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;numbers[10] = 3;//"ten"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;numbers[11] = 6;//"eleven"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;numbers[12] = 6;//"twelve"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;numbers[13] = 8;//"thirteen"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;numbers[14] = 8;//"fourteen"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;numbers[15] = 7;//"fifteen"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;numbers[16] = 7;//"sixteen"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;numbers[17] = 9;//"seventeen"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;numbers[18] = 8;//"eighteen"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;numbers[19] = 8;//"nineteen"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;numbers[20] = 6;//"twenty"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;numbers[30] = 6;//"thirty"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;numbers[40] = 5;//"forty"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;numbers[50] = 5;//"fifty"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;numbers[60] = 5;//"sixty"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;numbers[70] = 7;//"seventy"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;numbers[80] = 6;//"eighty"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;numbers[90] = 6;//"ninety"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;int get_length(int n)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;int a=0; //hundreds'digit&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;int b=0; //ten's digit&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;int c=0; //units' digit&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;int length = 0;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;a = n/100;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;n = n%100;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;b = n/10;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;c = n%10;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre; line-height: normal;"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;if(a!=0)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;length += numbers[a] + 7; // 7 for "hundred"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre; line-height: normal;"&gt;		&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;if(b!=0 || c!=0)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;length += 3; //3 for "and"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;if(b!=0)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;if(b==1)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;length += numbers[b*10+c];&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;return length;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;else&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;length += numbers[b*10];&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;if(c!=0)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;length += numbers[c];&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;return length;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;int main()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;int i, length=0;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;ini_numbers();&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;for(i=1; i&amp;lt;=999; i++)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;length += get_length(i);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;length += 11; //11 for "one thousand"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;printf("total length: %d\n", length);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 12pt; "&gt;return 0;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;font  face="'Trebuchet MS', sans-serif" size="3"&gt;&lt;span  style="line-height: normal; "&gt;&lt;span  style="font-family: Courier; font-size: 12pt; "&gt;}&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/zhouyinhui/aggbug/1970233.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/zhouyinhui/archive/2011/03/03/1970233.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/zhouyinhui/archive/2011/02/25/1965334.html</id><title type="text">[Project Euler] 来做欧拉项目练习题吧: 题目016</title><summary type="text">计算2^1000</summary><published>2011-02-25T13:15:00Z</published><updated>2011-02-25T13:15:00Z</updated><author><name>周银辉</name><uri>http://www.cnblogs.com/zhouyinhui/</uri></author><link rel="alternate" href="http://www.cnblogs.com/zhouyinhui/archive/2011/02/25/1965334.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/zhouyinhui/archive/2011/02/25/1965334.html"/><content type="html">&lt;p&gt;&lt;strong&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp;[Project Euler] 来做欧拉项目练习题吧: 题目016&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;周银辉&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;问题描述&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;p&gt;2&lt;sup&gt;15&lt;/sup&gt;&amp;nbsp;= 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26.&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;span  style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;What is the sum of the digits of the number 2&lt;sup&gt;1000&lt;/sup&gt;?&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;问题分析:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;直接用大数乘法就可以解决,并且速度挺快(言下之意"所以没有去找其他的招了").&lt;/p&gt;&lt;p&gt;将数字转换成字符串进行处理,2^m = 2^(m-1) * 2 我们将2^(m-1)放在字符数组buffer中，与2相乘时进位放在字符数组temp中，然后就可以模拟乘法了。&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;div&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/div&gt;&lt;div&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;/div&gt;&lt;div&gt;#include &amp;lt;string.h&amp;gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;#define POWER &amp;nbsp;1000&lt;/div&gt;&lt;div&gt;#define BUF_SZ 310&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;int test(char *buffer, char *temp)&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;buffer[BUF_SZ-1] = '2';&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;int i, j, a, b, c;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;for(i=2; i&amp;lt;=POWER; i++)&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;for(j=BUF_SZ-1; j&amp;gt;=0; j--)&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;a = (int)buffer[j]-48;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;b = (int)temp[j]-48;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;c = a*2+b;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;buffer[j] = (char)(c%10+48);&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;if(j&amp;gt;0)&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;				&lt;/span&gt;temp[j-1] = (char)(c/10+48);&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;int result=0;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;for(i=0; i&amp;lt;BUF_SZ; i++)&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;result += (int)buffer[i]-48;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;return result;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;int main()&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;char *buffer = (char*)malloc(sizeof(char)*BUF_SZ);&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;char *temp &amp;nbsp; = (char*)malloc(sizeof(char)*BUF_SZ);&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;memset(buffer, '0', BUF_SZ);&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;memset(temp, &amp;nbsp; '0', BUF_SZ);&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;printf("sum is: %d\n", test(buffer,temp));&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;printf("buffer is: %s\n", buffer);&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;free(buffer);&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;free(temp);&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;return 0;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;  &lt;title&gt;&lt;/title&gt;      &lt;p&gt;BUF_SZ之所以取310，因为我偷偷用计算器算了下2^1000的数量级是301，呵呵&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;在我的机器上(intel 2.4G双核):&lt;/p&gt;&lt;div&gt;  &lt;title&gt;&lt;/title&gt;      &lt;p&gt;real&amp;nbsp; &amp;nbsp; 0m0.011s&lt;/p&gt; &lt;p&gt;user&amp;nbsp; &amp;nbsp; 0m0.007s&lt;/p&gt; &lt;/div&gt;&lt;p&gt;sys &amp;nbsp; &amp;nbsp; 0m0.003s&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/zhouyinhui/aggbug/1965334.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/zhouyinhui/archive/2011/02/25/1965334.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/zhouyinhui/archive/2011/02/24/1963358.html</id><title type="text">[Project Euler] 来做欧拉项目练习题吧: 题目015</title><summary type="text">在20x20的方格中沿着方格从左上角前进到右下角(不走回头路)的方式共有多少种?</summary><published>2011-02-23T16:56:00Z</published><updated>2011-02-23T16:56:00Z</updated><author><name>周银辉</name><uri>http://www.cnblogs.com/zhouyinhui/</uri></author><link rel="alternate" href="http://www.cnblogs.com/zhouyinhui/archive/2011/02/24/1963358.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/zhouyinhui/archive/2011/02/24/1963358.html"/><content type="html">&lt;p&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/strong&gt;&lt;strong style="font-family: Courier; font-size: 10pt; "&gt;[Project Euler] 来做欧拉项目练习题吧: 题目015&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;周银辉&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong style="font-family: Courier; font-size: 10pt; "&gt;问题描述&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;p&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;Starting in the top left corner of a 2&lt;/span&gt;&lt;img src="http://projecteuler.net/images/symbol_times.gif" width="9" height="9" alt="&amp;#215;" border="0" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;2 grid, there are 6 routes (without backtracking) to the bottom right corner.&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center; "&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/zhouyinhui/PE15Pic.png" border="0" alt="" width="296" height="170" /&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;span  style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;How many routes are there through a 20&lt;img src="http://projecteuler.net/images/symbol_times.gif" width="9" height="9" alt="&amp;#215;" border="0" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /&gt;&lt;/span&gt;&lt;span  style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;20 grid?&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong style="font-family: Courier; font-size: 10pt; "&gt;问题分析&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;  &lt;title&gt;&lt;/title&gt;      &lt;p&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;这个题需要一点点观察能力：&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;观察2*2的方格，以左上角为起点，右下角为终点，形成的所有路径刚好可以构成一棵二叉树。&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;(不走回头路，并且以经过的方格上的节点为树节点，其中方格左上角为根节点，叶子节点始终是方格右下角)。&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;而路径条数也就是树的叶子节点个数。&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;用Count[A]表示树A的叶子节点个数，Left,Right表示左右子树.那么Count[A] = Count[Left] + Count[Right]&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;OK,问题就变得很简单了，一个递归算法就可以解决。&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;此后的问题，就是优化递归算法(创建一个缓冲区)，减少重复运算，否则速度是不可接受的。&lt;/span&gt;&lt;/p&gt;&lt;div&gt;  &lt;title&gt;&lt;/title&gt;      &lt;p&gt;&lt;div&gt;&lt;div&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;#define SZ &amp;nbsp; &amp;nbsp;21 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//20*20, index from 0 to 20, so size is 21&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;#define END (SZ-1)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;long long grid[SZ][SZ];&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;long long test(int i, int j)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;int record = grid[i][j];&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;if(record!=0)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;return record;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;if(i==END &amp;amp;&amp;amp; j==END)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;return 1;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;long long left=0, right=0, total=0;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;int &amp;nbsp;ni=i+1, nj=j+1; //ni: next i&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;if(ni&amp;lt;SZ)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;left = test(ni, j);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;grid[ni][j] = left;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;if(nj&amp;lt;SZ)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;right = test(i, nj);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;grid[i][nj] = right;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;total = left+right;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;grid[i][j] = total;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;return total;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;int main()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;printf("path count: %lld\n", test(0,0));&lt;/span&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;return 0;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/p&gt;&lt;/div&gt; &lt;p&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;速度挺快的:&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;real&amp;nbsp; &amp;nbsp; 0m0.004s&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;user&amp;nbsp; &amp;nbsp; 0m0.001s&lt;/span&gt;&lt;/p&gt; &lt;/div&gt;&lt;p&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;sys &amp;nbsp; &amp;nbsp; 0m0.003s&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/zhouyinhui/aggbug/1963358.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/zhouyinhui/archive/2011/02/24/1963358.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/zhouyinhui/archive/2011/02/20/1959248.html</id><title type="text">[Project Euler] 来做欧拉项目练习题吧: 题目014</title><summary type="text">在小于1000000的数中，哪个数作为首项并按如下公式能得到最长的数列：n --&gt; n/2 (n is even) ;   n --&gt; 3n + 1 (n is odd)</summary><published>2011-02-20T13:02:00Z</published><updated>2011-02-20T13:02:00Z</updated><author><name>周银辉</name><uri>http://www.cnblogs.com/zhouyinhui/</uri></author><link rel="alternate" href="http://www.cnblogs.com/zhouyinhui/archive/2011/02/20/1959248.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/zhouyinhui/archive/2011/02/20/1959248.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;[Project Euler] 来做欧拉项目练习题吧: 题目014&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;周银辉&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;问题描述&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;p&gt;The following iterative sequence is defined for the set of positive integers:&lt;/p&gt;&lt;p style="margin-left: 50px; "&gt;&lt;var style="font-family: 'times new roman'; font-style: italic; font-size: 19px; "&gt;n&lt;/var&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;var style="font-family: 'times new roman'; font-style: italic; font-size: 19px; "&gt;n&lt;/var&gt;/2 (&lt;var style="font-family: 'times new roman'; font-style: italic; font-size: 19px; "&gt;n&lt;/var&gt;&amp;nbsp;is even)&lt;br /&gt;&lt;var style="font-family: 'times new roman'; font-style: italic; font-size: 19px; "&gt;n&lt;/var&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;3&lt;var style="font-family: 'times new roman'; font-style: italic; font-size: 19px; "&gt;n&lt;/var&gt;&amp;nbsp;+ 1 (&lt;var style="font-family: 'times new roman'; font-style: italic; font-size: 19px; "&gt;n&lt;/var&gt;&amp;nbsp;is odd)&lt;/p&gt;&lt;p&gt;Using the rule above and starting with 13, we generate the following sequence:&lt;/p&gt;&lt;div style="text-align: center; "&gt;13 --&amp;gt;&amp;nbsp;40 --&amp;gt;&amp;nbsp;20 --&amp;gt;&amp;nbsp;10 --&amp;gt;&amp;nbsp;5 --&amp;gt;&amp;nbsp;16 --&amp;gt;&amp;nbsp;8 --&amp;gt;&amp;nbsp;4 --&amp;gt;&amp;nbsp;2 --&amp;gt;&amp;nbsp;1&lt;/div&gt;&lt;p&gt;It can be seen that this sequence (starting at 13 and finishing at 1) contains 10 terms. Although it has not been proved yet (Collatz Problem), it is thought that all starting numbers finish at 1.&lt;/p&gt;&lt;p&gt;Which starting number, under one million, produces the longest chain?&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;span  style="font-family: 'Trebuchet MS', sans-serif; font-size: 13px; line-height: normal; "&gt;&lt;strong&gt;NOTE:&lt;/strong&gt;&amp;nbsp;Once the chain starts the terms are allowed to go above one million.&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;问题分析：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;在小于1000000的数中，哪个数作为首项并按如下公式能得到最长的数列：&lt;/p&gt;&lt;div&gt;&lt;span style="line-height: normal; "&gt;&lt;var style="font-family: 'times new roman'; font-style: italic; font-size: 19px; "&gt;n&lt;/var&gt;&lt;font  face="'Trebuchet MS', sans-serif" size="3"&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;&lt;/font&gt;&lt;var style="font-family: 'times new roman'; font-style: italic; font-size: 19px; "&gt;n&lt;/var&gt;&lt;font  face="'Trebuchet MS', sans-serif" size="3"&gt;/2 (&lt;/font&gt;&lt;var style="font-family: 'times new roman'; font-style: italic; font-size: 19px; "&gt;n&lt;/var&gt;&lt;font  face="'Trebuchet MS', sans-serif" size="3"&gt;&amp;nbsp;is even)&lt;/font&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;span  style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;var style="font-family: 'times new roman'; font-style: italic; font-size: 19px; "&gt;n&lt;/var&gt;&amp;nbsp;--&amp;gt;&amp;nbsp;3&lt;var style="font-family: 'times new roman'; font-style: italic; font-size: 19px; "&gt;n&lt;/var&gt;&amp;nbsp;+ 1 (&lt;var style="font-family: 'times new roman'; font-style: italic; font-size: 19px; "&gt;n&lt;/var&gt;&amp;nbsp;is odd)&lt;/span&gt;&lt;/p&gt;&lt;div&gt;  &lt;title&gt;&lt;/title&gt;      &lt;p&gt;根据n判断其构成的数列长度，如果n比较小的话，则简单地写个递归函数就可以了。&lt;/p&gt; &lt;p&gt;但对于一百万这样的大数据，递归一百万次效率很低下，并且可能堆栈溢出。&lt;/p&gt; &lt;p&gt;所以，为了减少递归次数，用一个缓冲区来保存中间结果，比如我们已经计算过13的话，在计算26时，其除以2等于13，&lt;/p&gt; &lt;p&gt;然后我们可以直接从缓冲区中取13上次的计算结果。&lt;/p&gt; &lt;/div&gt;&lt;p&gt;另外在缓冲区中取值时有一个技巧：我们应该在递归前判断缓冲区中是否有值，如果有则不递归，而不应该在递归后才判断缓冲区是否有值(如果有则立即返回)。前者递归函数要调用132434424次，时间上约30秒，后者调用3168610次，时间上1秒多。&lt;/p&gt;&lt;p&gt;设置的缓冲区在递归算法中经常用到，就如许多动态规划题目一样&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;  &lt;title&gt;&lt;/title&gt;      &lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;std::hash_map&amp;lt;long, long&amp;gt; buffer;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;long &amp;nbsp;get_chain_length(long n)&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;long length=0, next;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;std::hash_map&amp;lt;long, long&amp;gt;::iterator found;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;if(n==1)&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;length = 1;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;else&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;next = n%2==0? n&amp;gt;&amp;gt;1 : n*3+1;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;found = buffer.find(n);&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;if(found != buffer.end())&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;length = found-&amp;gt;second;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;else&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;length = 1+ get_chain_length(next);&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;buffer[n] = length;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;}&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;return length;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/zhouyinhui/aggbug/1959248.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/zhouyinhui/archive/2011/02/20/1959248.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/zhouyinhui/archive/2011/02/17/1956589.html</id><title type="text">[Project Euler] 来做欧拉项目练习题吧: 题目013</title><summary type="text">计算100个50位数之和</summary><published>2011-02-16T23:21:00Z</published><updated>2011-02-16T23:21:00Z</updated><author><name>周银辉</name><uri>http://www.cnblogs.com/zhouyinhui/</uri></author><link rel="alternate" href="http://www.cnblogs.com/zhouyinhui/archive/2011/02/17/1956589.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/zhouyinhui/archive/2011/02/17/1956589.html"/><content type="html">&lt;p&gt;&lt;span style="font-family: Courier; "&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;strong&gt;[Project Euler] 来做欧拉项目练习题吧: 题目013&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Courier; "&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;周银辉&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Courier; "&gt;&lt;strong&gt;问题描述：&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Courier; "&gt;Work out the first ten digits of the sum of the following one-hundred 50-digit numbers.&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div style="font-family: 'courier new'; font-size: 10pt; text-align: center; "&gt;&lt;span style="font-family: Courier; "&gt;37107287533902102798797998220837590246510135740250&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
46376937677490009712648124896970078050417018260538&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
74324986199524741059474233309513058123726617309629&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
91942213363574161572522430563301811072406154908250&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
23067588207539346171171980310421047513778063246676&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
89261670696623633820136378418383684178734361726757&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
28112879812849979408065481931592621691275889832738&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
44274228917432520321923589422876796487670272189318&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
47451445736001306439091167216856844588711603153276&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
70386486105843025439939619828917593665686757934951&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
62176457141856560629502157223196586755079324193331&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
64906352462741904929101432445813822663347944758178&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
92575867718337217661963751590579239728245598838407&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
58203565325359399008402633568948830189458628227828&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
80181199384826282014278194139940567587151170094390&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
35398664372827112653829987240784473053190104293586&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
86515506006295864861532075273371959191420517255829&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
71693888707715466499115593487603532921714970056938&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
54370070576826684624621495650076471787294438377604&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
53282654108756828443191190634694037855217779295145&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
36123272525000296071075082563815656710885258350721&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
45876576172410976447339110607218265236877223636045&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
17423706905851860660448207621209813287860733969412&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
81142660418086830619328460811191061556940512689692&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
51934325451728388641918047049293215058642563049483&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
62467221648435076201727918039944693004732956340691&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
15732444386908125794514089057706229429197107928209&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
55037687525678773091862540744969844508330393682126&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
18336384825330154686196124348767681297534375946515&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
80386287592878490201521685554828717201219257766954&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
78182833757993103614740356856449095527097864797581&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
16726320100436897842553539920931837441497806860984&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
48403098129077791799088218795327364475675590848030&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
87086987551392711854517078544161852424320693150332&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
59959406895756536782107074926966537676326235447210&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
69793950679652694742597709739166693763042633987085&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
41052684708299085211399427365734116182760315001271&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
65378607361501080857009149939512557028198746004375&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
35829035317434717326932123578154982629742552737307&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
94953759765105305946966067683156574377167401875275&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
88902802571733229619176668713819931811048770190271&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
25267680276078003013678680992525463401061632866526&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
36270218540497705585629946580636237993140746255962&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
24074486908231174977792365466257246923322810917141&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
91430288197103288597806669760892938638285025333403&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
34413065578016127815921815005561868836468420090470&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
23053081172816430487623791969842487255036638784583&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
11487696932154902810424020138335124462181441773470&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
63783299490636259666498587618221225225512486764533&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
67720186971698544312419572409913959008952310058822&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
95548255300263520781532296796249481641953868218774&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
76085327132285723110424803456124867697064507995236&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
37774242535411291684276865538926205024910326572967&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
23701913275725675285653248258265463092207058596522&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
29798860272258331913126375147341994889534765745501&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
18495701454879288984856827726077713721403798879715&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
38298203783031473527721580348144513491373226651381&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
34829543829199918180278916522431027392251122869539&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
40957953066405232632538044100059654939159879593635&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
29746152185502371307642255121183693803580388584903&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
41698116222072977186158236678424689157993532961922&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
62467957194401269043877107275048102390895523597457&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
23189706772547915061505504953922979530901129967519&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
86188088225875314529584099251203829009407770775672&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
11306739708304724483816533873502340845647058077308&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
82959174767140363198008187129011875491310547126581&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
97623331044818386269515456334926366572897563400500&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
42846280183517070527831839425882145521227251250327&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
55121603546981200581762165212827652751691296897789&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
32238195734329339946437501907836945765883352399886&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
75506164965184775180738168837861091527357929701337&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
62177842752192623401942399639168044983993173312731&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
32924185707147349566916674687634660915035914677504&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
99518671430235219628894890102423325116913619626622&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
73267460800591547471830798392868535206946944540724&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
76841822524674417161514036427982273348055556214818&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
97142617910342598647204516893989422179826088076852&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
87783646182799346313767754307809363333018982642090&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
10848802521674670883215120185883543223812876952786&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
71329612474782464538636993009049310363619763878039&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
62184073572399794223406235393808339651327408011116&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
66627891981488087797941876876144230030984490851411&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
60661826293682836764744779239180335110989069790714&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
85786944089552990653640447425576083659976645795096&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
66024396409905389607120198219976047599490197230297&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
64913982680032973156037120041377903785566085089252&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
16730939319872750275468906903707539413042652315011&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
94809377245048795150954100921645863754710598436791&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
78639167021187492431995700641917969777599028300699&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
15368713711936614952811305876380278410754449733078&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
40789923115535562561142322423255033685442488917353&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
44889911501440648020369068063960672322193204149535&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
41503128880339536053299340368006977710650566631954&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
81234880673210146739058568557934581403627822703280&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
82616570773948327592232845941706525094512325230608&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
22918802058777319719839450180888072429661980811197&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
77158542502016545090413245809786882778948721859617&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
72107838435069186155435662884062257473692284509516&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
20849603980134001723930671666823555245252804609722&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier; "&gt;&#xD;
53503534226472524250874054075591789781264330331690&lt;/span&gt;&lt;br /&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;font  face="'courier new'" size="2"&gt;&lt;span  style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Courier; "&gt;&lt;strong&gt;问题分析：&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;先说正统的解法：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;此类称为"大数问题"，比如大数加法，大数乗法什么的。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;大数问题，一般将数转换为字符串，然后用字符串模拟数学运算规则。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;&amp;nbsp;&amp;nbsp;a: xxxxx&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;+ b: yyyyy&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;----------&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;&amp;nbsp;&amp;nbsp;d: wwwww&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;&amp;nbsp;&amp;nbsp;c: zzzzz&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;a+b要得到c的运算法则非常简单：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;用d来保存进位，然后从右到左，abd的对应位相加，所得和的个位数保存在c的对应位中，&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;所得和的十位数保存在d的对应位中。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;但要注意，c和d的最大位数可能会超过a和b的位数。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;就此题而言，m个n位数相加之和的最大位数为：(m的位数)+n&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;所以，100个50位数相加，和的最大位数为：100的位数3加上50：53。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;参考代码：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;#include &amp;lt;string.h&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;#define LINES &amp;nbsp; &amp;nbsp; &amp;nbsp; 100&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;#define COLUMNS &amp;nbsp; &amp;nbsp; 51 //之所以是51，因为用fgets时会将\n读入&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;#define SUM_DIGITS &amp;nbsp;53 //最多达到53位&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;char** get_data()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; "&gt;//读取题目给出的数据，并保存在一个字符串数组中&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;void free_data(char** data)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; "&gt;//释放字符串数组的空间&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;int main()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; "&gt;char** data = get_data();&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; "&gt;char &amp;nbsp; sum[SUM_DIGITS];&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; "&gt;char &amp;nbsp; *str;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; "&gt;int &amp;nbsp; &amp;nbsp;i, j, k, a, b, c;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; "&gt;memset(sum, '0', SUM_DIGITS);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; "&gt;for(i=0; i&amp;lt;LINES; i++)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="font-family: Courier; "&gt;str = data[i];&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="font-family: Courier; "&gt;int temp[SUM_DIGITS]={0};&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="font-family: Courier; "&gt;for(j=COLUMNS-2,k=SUM_DIGITS-1; k&amp;gt;=0; j--,k--)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="font-family: Courier; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;span style="font-family: Courier; "&gt;a = j&amp;gt;=0?((int)str[j]-48):0;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;span style="font-family: Courier; "&gt;b = (int)sum[k]-48;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;span style="font-family: Courier; "&gt;c = temp[k];&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;span style="font-family: Courier; "&gt;sum[k] = (char)((a+b+c)%10+48);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;span style="font-family: Courier; "&gt;if(k&amp;gt;=1)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;span style="font-family: Courier; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;				&lt;/span&gt;&lt;span style="font-family: Courier; "&gt;temp[k-1] = (a+b+c)/10;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;span style="font-family: Courier; "&gt;}&lt;/span&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="font-family: Courier; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; "&gt;printf("%s\n", sum);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; "&gt;free_data(data);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; "&gt;return 0;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="font-family: Courier; "&gt;}&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;然后，来个比较耍小聪明的解法：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;上面的解法子所以要使用字符串的形式是因为数太大，我们可以将数化小，然后进行普通的加法运算就可以了。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;比如&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;37107287533902102798797998220837590246510135740250&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;化为&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; "&gt;3.7107287533902102798797998220837590246510135740250&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="font-family: Courier; "&gt;只要double能达到这个精度就行，事实上也是可以的。&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;这个故事也告诉我们，在看到超范围的大数据计算时，第一反应很可能是用字符串模拟进行大数运算，但有时是可以分析具体问题的各个条件而耍点小聪明让问题变简单的。比如48题直接用大数则会显得不那么聪明了。&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/zhouyinhui/aggbug/1956589.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/zhouyinhui/archive/2011/02/17/1956589.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/zhouyinhui/archive/2011/02/16/1955691.html</id><title type="text">[Project Euler] 来做欧拉项目练习题吧: 题目012</title><summary type="text">找出第一个拥有超过500个约数的三角数。</summary><published>2011-02-15T23:21:00Z</published><updated>2011-02-15T23:21:00Z</updated><author><name>周银辉</name><uri>http://www.cnblogs.com/zhouyinhui/</uri></author><link rel="alternate" href="http://www.cnblogs.com/zhouyinhui/archive/2011/02/16/1955691.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/zhouyinhui/archive/2011/02/16/1955691.html"/><content type="html">&lt;p&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;&lt;strong style="font-family: Courier; font-size: 10pt; "&gt;[Project Euler] 来做欧拉项目练习题吧: 题目012&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 周银辉&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong style="font-family: Courier; font-size: 10pt; "&gt;问题描述：&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;p style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;span style="font-family: Verdana; font-size: 10pt; "&gt;The sequence of triangle numbers is generated by adding the natural numbers. So the 7&lt;/span&gt;&lt;sup style="font-family: Verdana; font-size: 10pt; "&gt;th&lt;/sup&gt;&lt;span style="font-size: 10pt; "&gt;triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten terms would be:&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center; font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;span style="font-family: Verdana; font-size: 10pt; "&gt;1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;span style="font-family: Verdana; font-size: 10pt; "&gt;Let us list the factors of the first seven triangle numbers:&lt;/span&gt;&lt;/p&gt;&lt;blockquote style="font-family: 'courier new'; font-size: 16px; line-height: normal; "&gt;&lt;strong style="font-family: Verdana; font-size: 10pt; "&gt;&amp;nbsp;1&lt;/strong&gt;&lt;span style="font-size: 10pt; "&gt;: 1&lt;/span&gt;&lt;br style="font-size: 10pt; " /&gt;&lt;strong style="font-size: 10pt; "&gt;&amp;nbsp;3&lt;/strong&gt;&lt;span style="font-size: 10pt; "&gt;: 1,3&lt;/span&gt;&lt;br style="font-size: 10pt; " /&gt;&lt;strong style="font-size: 10pt; "&gt;&amp;nbsp;6&lt;/strong&gt;&lt;span style="font-size: 10pt; "&gt;: 1,2,3,6&lt;/span&gt;&lt;br style="font-size: 10pt; " /&gt;&lt;strong style="font-size: 10pt; "&gt;10&lt;/strong&gt;&lt;span style="font-size: 10pt; "&gt;: 1,2,5,10&lt;/span&gt;&lt;br style="font-size: 10pt; " /&gt;&lt;strong style="font-size: 10pt; "&gt;15&lt;/strong&gt;&lt;span style="font-size: 10pt; "&gt;: 1,3,5,15&lt;/span&gt;&lt;br style="font-size: 10pt; " /&gt;&lt;strong style="font-size: 10pt; "&gt;21&lt;/strong&gt;&lt;span style="font-size: 10pt; "&gt;: 1,3,7,21&lt;/span&gt;&lt;br style="font-size: 10pt; " /&gt;&lt;strong style="font-size: 10pt; "&gt;28&lt;/strong&gt;&lt;span style="font-size: 10pt; "&gt;: 1,2,4,7,14,28&lt;/span&gt;&lt;/blockquote&gt;&lt;p style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;span style="font-family: Verdana; font-size: 10pt; "&gt;We can see that 28 is the first triangle number to have over five divisors.&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;span style="font-family: Verdana; font-size: 10pt; "&gt;What is the value of the first triangle number to have over five hundred divisors?&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;strong style="font-family: Courier; font-size: 10pt; "&gt;问题分析：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;题目要求找出第一个拥有超过500个约数的三角数。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;  &lt;title&gt;&lt;/title&gt;      &lt;p style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;首先，求第i个三角数很容易，其是1～i之和&lt;/span&gt;&lt;/p&gt;&lt;div style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;div&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;long get_trangle_number(int i)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;return ((long)(1+i)*i)/2;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;/div&gt; &lt;p style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;难在如何求一个数n的约数，观察 28: 1,2,4,7,14,28 除了1和28(n本身)外，其它约数中，关键约数是2和7，剩下的则是关键约数的倍数&lt;/span&gt;&lt;/p&gt; &lt;p style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;所以，先求出关键的这些约数，然后再求约数的倍数，而关键的约数也就是质因数(prime factor),求一个数的质因数&lt;/span&gt;&lt;strong style="font-family: Courier; font-size: 10pt; "&gt;参考&lt;a href="http://www.cnblogs.com/zhouyinhui/archive/2011/01/09/1931391.html"&gt;003题&lt;/a&gt;。&lt;/strong&gt;&lt;/p&gt; &lt;p style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;get_divisors_count这个函数是上述算法的粗糙版本，&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;int get_divisors_count(int number)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;if(number&amp;lt;1)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;return 1;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;int count &amp;nbsp; &amp;nbsp; = 0;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;int factor &amp;nbsp; &amp;nbsp;= 2;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;int n &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = number;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;int buffer_sz = number+1;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;int i;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;int array[buffer_sz];&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;for(i=0; i&amp;lt;buffer_sz; i++)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;array[i]=0;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;array[1] &amp;nbsp; &amp;nbsp; &amp;nbsp;= 1;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;array[number] = 1;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;while(n&amp;gt;1)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;if(n%factor==0)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;//printf("prime factor found: %d\n", factor);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;array[factor]=1;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre; line-height: normal;"&gt;			&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;i=2;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;while(number%(i*factor)==0)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;				&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;array[i*factor]=1;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;				&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;i++;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre; line-height: normal;"&gt;				&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;while(n%factor==0)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;				&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;n/=factor;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;factor++;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//printf("divisors of %d: ", number);&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;for(i=0; i&amp;lt;buffer_sz; i++)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;if(array[i]==1)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;//printf("%d ", i);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;count++;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre; line-height: normal;"&gt;		&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="line-height: normal;"&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;return count;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;font  face="'Trebuchet MS', sans-serif" size="3"&gt;&lt;span  style="line-height: normal; "&gt;&lt;span  style="font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;其中有个问题是如何记录已经找到的约数,由于有可能存在重复查找(比如14是2的倍数也是7的倍数，所以重复查找了)则不能简单地累计，&lt;/span&gt;&lt;/p&gt; &lt;p style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;要记录这些数，最简单的方法是用hashtable之类的，但标准C里面没有内置，所以我用了一个数组，数组下标表示约数，值为1则表示找到了。&lt;/span&gt;&lt;/p&gt; &lt;/div&gt;&lt;font  face="'Trebuchet MS', sans-serif" size="3"&gt;&lt;span  style="line-height: normal; font-family: Courier; font-size: 10pt; "&gt;数组对于比较小的数没问题，但数太大的话，一是遍历是效率低下，二是如果在栈上分配的容易导致内存错误。&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;p&gt;&lt;/p&gt;&lt;p style="font-family: 'Trebuchet MS', sans-serif; font-size: 16px; line-height: normal; "&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;上述方法是可以改进的，然后得到了get_divisors_count2这个函数，理论基础来自于这里：&lt;/span&gt;&lt;a href="http://mathforum.org/library/drmath/view/55843.html"&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;http://mathforum.org/library/drmath/view/55843.html&amp;nbsp;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;于是我们得到更高效的函数：&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;int get_divisors_count2(long number)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;if(number&amp;lt;1)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;return 1;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;int count &amp;nbsp; &amp;nbsp; = 1;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;int factor &amp;nbsp; &amp;nbsp;= 2;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;long n &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= number;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;int i, t;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;while(n&amp;gt;1)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;if(n%factor==0)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;//printf("prime factor found: %d\n", factor);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;t = 1;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;while(n%factor==0)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;				&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;t++;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;				&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;n/=factor;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;			&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;count *= t;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;factor++;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;	&lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;return count;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier; font-size: 10pt; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&amp;nbsp;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span  style="color: #333333; font-family: verdana, 宋体, Arial; font-size: 13px; line-height: 24px; "&gt;&lt;span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: verdana, 宋体, Arial; line-height: 24px; font-size: 13px; color: #333333; "&gt;&lt;span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: red; font-family: Courier; font-size: 10pt; "&gt;注：&lt;/span&gt;&lt;/span&gt;&lt;span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 24px; color: #333333; font-family: Courier; font-size: 10pt; "&gt;当完成题目后，对于某些题，官方网站会给出参考答案，在我的博客里不会将官方答案贴出来，仅仅会写下我自己当时的思路，除非两者不谋而合。另外，如果你有更好的思路，请留言告诉我，我非常乐意参与到讨论中来。&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/zhouyinhui/aggbug/1955691.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/zhouyinhui/archive/2011/02/16/1955691.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
