上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 14 下一页
摘要: 1 大家都知道,C语言的基本数据类型提供的可计算范围非常有限的 2 那么我们需要处理大数据时怎么办呢 3 其实有一种方法可以很轻松的解决这个问题 4 那就是高精度算法。 5 6 首先,我们介绍整数的高精度加法 7 8 算法的思路: 9 模拟我们在小学所学的笔算 10 (对于不足位用0补齐,如9818+13,我们认为是9818+0013) 11 假设我们要计算的两数分别是 A1 A2 A3 A4 、 B1 B2 B3 B4 12 那么我们笔算时,会列出这样的式子 13 14 A1 A2 A3 A4 15 + B1 B2 B3 B4 16 --------------... 阅读全文
posted @ 2013-08-05 12:28 Geekers 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 约定:x%y为x取模y,即x除以y所得的余数,当x1) {//一直计算,直到指数小于或等于1 if((p%2)!=0) {// 如果指数p是奇数,则说明计算后会剩一个多余的数,那么在这里把它乘到结果中 odd*=main; //把“剩下的”乘起来 } main*=main; //主体乘方 p/=2; //指数除以2 } return main*odd; //最后把主体和“剩下的”乘起来作为结果}够完美了吗?不,还不够!看出来了吗?main是没有必要的,并且我们可以有更快的代码来判断奇数。要... 阅读全文
posted @ 2013-08-04 12:32 Geekers 阅读(528) 评论(0) 推荐(0) 编辑
摘要: int prime(int n){ int i; if(n == 2) return 1; if(n%2 == 0) return 0; for(i=3; i*i 0;i++) 5 { 6 t[i]=n%10; 7 n/=10; 8 } 9 len = i;10 for(i=0,j=len-1;isqrt(i) ) prime[num++] = i; //这个prime[]是int型,跟下面讲的不同。 } 这就是最一般的求解n以内素数的算法。复杂度是o(n*sqrt(n)),... 阅读全文
posted @ 2013-08-04 00:08 Geekers 阅读(743) 评论(0) 推荐(0) 编辑
摘要: 问题: 将所有回文数从小到大排列,求第N个回文数。 一个正数如果顺着和反过来都是一样的(如13431,反过来也是13431),就称为回文数。约束: 回文数不能以0开头。 最小回文数是1。思路: 许多朋友(包括我自己)一开始就思考使用循环:从1开始,判断该数是否是回文数,然后用一个计数器记下回文数,一直到计数器得到N,返回第N个回文数。比较常用的是以下这种方法来判断是否回文数:staticbooleanisPN(intnum){into=num;inttmp=0;//使用循环把数字顺序反转while(num!=0){tmp*=10;tmp+=num%10;num/=10;}//如果原始数与反转后 阅读全文
posted @ 2013-08-03 21:34 Geekers 阅读(415) 评论(0) 推荐(0) 编辑
摘要: 这题在DFS的同时必须考虑剪枝,,给出三个别人的代码,一个耗时7秒多,一个2秒多,最后一个只有46MS,相差甚大,都是剪枝的功劳。 1 #include 2 #include 3 const int MAX =1002; 4 bool flag = false; 5 bool vist[MAX][MAX]; 6 int s,e,map[MAX][MAX]; 7 int dir[5][3]={{1,0},{0,1},{-1,0},{0,-1}}; 8 void DFS(int x,int y,int cnt,int d) 9 {10 if(cnt>2||vist[x][y]||fla... 阅读全文
posted @ 2013-08-03 11:23 Geekers 阅读(338) 评论(0) 推荐(0) 编辑
摘要: 深度优先算法入门的一道非常好的题目,还考虑到了剪枝http://acm.hdu.edu.cn/showproblem.php?pid=1010 1 //这个代码是没有考虑任何剪枝的 2 //将所以情况都遍历了一遍, 3 //提交的时候是会超时的 Time Limit Exceeded 4 #include 5 #include 6 using namespace std; 7 8 #define MAX 10 9 char mapz[MAX][MAX];10 int N,M,T;11 int dx, dy;12 bool escape;13 14 void dfs(int sx, int .. 阅读全文
posted @ 2013-08-02 21:49 Geekers 阅读(322) 评论(0) 推荐(0) 编辑
摘要: C语言的初学者经常会问一些貌似“专业”的问题,比如#includemain(){inti=5;intj=++i+++i+++i;printf("%d\n",j);system("pause");}这样的问题实在不需要多做考虑,而且应该在实际编程实践中尽量避免。因为它们几乎都是“未指明的行为”或“由实现定义的行为”。另一方面,程序的错误或Bugs,通常是由于“未定义的行为”。C++Primer第四版中的解释:使用了未定义行为的程序都是错误的,即使程序能够运行,也只是巧合。未定义行为源于编译器不能检测到的程序错误或太麻烦以至无法检测的错误。不幸的是,含有未定 阅读全文
posted @ 2013-08-02 15:28 Geekers 阅读(2818) 评论(0) 推荐(1) 编辑
摘要: 你认为为什么C++不叫做++C?看到这个习题,顿感眼前一亮(不禁想起某些国内书籍的题目,真是平淡如水),这对于理解前自增操作与后自增操作而言着实是个好的题目。想弄明白这个问题,就需要先理解一些基础的概念。什么是自增操作呢?++操作符,即自增操作符。自增操作符有两种形式:前置操作和后置操作。前自增操作生成左值,在给操作数加1后返回改变后的操作数值。后自增操作生成右值,给操作数加1但返回未改变的操作数原值。*事实上,因为C++具有操作符重载的功能,自增操作不仅仅可以表示加1前置操作返回的是加1后的值,返回的是对象本身,所以这是左值。后置操作返回的是加1前的值,其返回值可以近似的理解为与原操作数值相 阅读全文
posted @ 2013-08-02 15:05 Geekers 阅读(1191) 评论(0) 推荐(1) 编辑
摘要: 1、动态申请一维内存(1)、用malloc函数#include #include #include int main(){ int n=5; int *temp; temp=(int*)malloc(sizeof(int)*n); for(int i=0;iusing namespace std;int main(){ int n=5; int *temp; temp=new int[n]; for(int i=0;i#include #include int main(){ int n=5; //n表示行 int **temp... 阅读全文
posted @ 2013-08-02 13:32 Geekers 阅读(628) 评论(0) 推荐(0) 编辑
摘要: //译题//★Prime Cryptarithm 牛式下面是一个乘法竖式,如果用我们给定的那几个数字来取代*,可以使式子成立的话,我们就叫这个式子牛式. * * *x * * ------- * * ** * *-------* * * *数字只能取代*,当然第一位不能为0.写一个程序找出所有的牛式.PROGRAM NAME: crypt1INPUT FORMATLine 1: 数字的个数.Line 2: N 个用空格分开的数字(每个数字都∈{1,2,3,4,5,6,7,8,9}) .SAMPLE INPUT (file crypt1.in)52 3 4 6 8OUTPUT ... 阅读全文
posted @ 2013-08-02 00:00 Geekers 阅读(324) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 14 下一页