经典编程题(持续更新)~
来源:互联网 发布:chm阅读器 windows 编辑:程序博客网 时间:2024/06/10 14:45
1.数值的整数次方
double powerwithunsigned(double base,unsigned exponent){ if(!exponent) return 1; if(exponent==1) return base; double result =powerwithunsigned(base,exponent >>1);//注意这里将右移代替了除法 result*=result; if(exponent&0x1==1)//这里将与1的结果代替了判断奇偶 result*=base; return result;}
《剑指offer》
2.删除字符串中所有的字符c
void squeeze(char *s,int c){ int i=0,j=0; for(;s[i]!='\0';++i) if(s[i]!=c) s[j++]=s[i];//相当于拷贝到另一个数组 s[j]='\0';}
《c程序设计语言》K&R
3.参数为1的二进制位数
int bitcount(int x){ int cnt=0; while(x) { x&=x-1;//非常经典的用法 ++cnt; } return cnt;}
《c程序设计语言》K&R
4.值交换
int inplace_swap(int *x,int *y)//b=(a^b)^a神奇的异或运算{*y=*x^*y;*x^=*y;*y^=*y;}
《深入理解计算机系统》
5.atoi
int atoi(char *s){ int i=0,n=0,sign; for(;isspace (s[i]);++i) ; sign=(s[i]=='-')?-1:1; if(s[i]=='-'||s[i]=='+') ++i; for(;isdigit (s[i]);++i) n=n*10+s[i]-'0'; return sign*n;}
《c程序设计语言》K&R
6.转置字符串
void reverse(char *s){ int i,j ,c; for(i=0,j=strlen(s)-1;i<j;++i,--j) { c=s[i]; s[i]=s[j]; s[j]=s[c]; }}
《c程序设计语言》K&R
7.itoa
void itoa(int n ,char*s){ int i=0,sign; if((sign=n)<0) n=-n;//这里最大负数求反还是其本身 do { s[i++]=n%10+'0'; } while(n/=10>0); if(sign<0) s[i++]='-'; s[i]='\0'; reverse(s);}
针对n等于最大负数情况有如下改进:
void itoa2w(int n,char*s){ int i=0,sign; sign=n; do { s[i++]=abs(n%10)+'0';//直接对余数求绝对值 } while((n/=10)!=0);//改为!=0因为n可能为负数 if(sign<0) s[i++]='-'; s[i]='\0'; reverse(s);}
《c程序设计语言》K&R
8.反转单链表
ListNode* reverseList(ListNode* head) { if(head==NULL) return NULL; ListNode* bp=NULL; ListNode* p=head; ListNode* ap=p->next; while(ap!=NULL) { p->next=bp; bp=p; p=ap; ap=ap->next; } p->next=bp; return p; }
《数据结构与算法分析-c》weiss
9.小于n的素数的个数
int countprimes(int n){ int *array=new int[n](); int count=0; for(int i=2;i<=(int)sqrt(n);++i) { if(!array[i]) { for(int j=i;i*j<n;++j) array[i*j]=true; } } for(int i=2;i<n;++i) if(!array[i]) ++count; delete [] array; return count;}
leetcode
10.找零钱
int small_change(int money)//钱{ int coin[]={5,2,1};//硬币种类 int cnt=0; while(money)//功能简单,一目了然 { if(money>=coin[0]) { money-=coin[0]; ++cnt; } else if(money>=coin[1]) { money-=coin[1]; ++cnt; } else if(money>=coin[2]) { money-=coin[2]; ++cnt; } } return cnt;}
by vashzx
0 0
- 经典编程题(持续更新)~
- 读书笔记----《C++编程经典》---(持续更新)
- 编程基础知识(持续更新)
- 经典bug分享(持续更新)
- js常见编程题整理(持续更新中)
- Java 算法题编程必会技法(持续更新)
- 网络编程杂项 (持续更新)
- 编程小技巧(持续更新中)
- 编程那些事儿(持续更新中)
- QtCreator excel编程 QAxObject(持续更新)
- Python编程学习(持续更新)
- spark编程debug(持续更新!)
- 编程的良好习惯(持续更新)
- 【编程】2016.04.29(持续更新中)
- [Java]Servlet编程(持续更新)
- source insight 编程风格(持续更新)
- 编程时常见问题(持续更新)
- ios 经典算法(持续更新)
- ParaviewWeb学习记录3
- 《C++ primer》——ch5 表达式:new和delete
- VS2010连接SQLSERVER2008数据库的步骤
- 比较好的博客
- Matlab中下标,斜体,及希腊字母的使用方法
- 经典编程题(持续更新)~
- 23种设计模式全解析
- [转]MTK6515 android打版软件配置
- 使用ibatis作为orm框架时, 如果实体/DO/POJO类中有自定义的构造函数, 会抛出could not instantiate result class
- union测试大端小端的例子
- python实现各种排序算法
- 求两个有序整型数组元素和的第K大值
- linux目录
- Android 官方推荐 : DialogFragment 创建对话框