




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1. C/C+最近这段时间忙于笔试、面试,没时间做总结。把碰到的几个有些疑问的东西拿出来分享一下。1,如果用一个循环数组q0.m-1表示队列时,该队列只有一个队列头指针front,不设队列尾指针rear,求这个队列中从队列投到队列尾的元素个数(包含队列头、队列尾)。(华赛面试题、腾讯笔试题)刚开始是去华赛面试时,面试官把这个题拿出来问我,我看了半天,没明白什么意思,考官说用一个很简单的表达式表示出来,楞了半天,还是不明白什么意思。当时面试官也没说答案,昨天去腾讯笔试,又碰到了这个题。后来网上查了下,自己又仔细想了想。这个题分两种情况,一种是rearfront,此时n=rear-front+1;由于是循环队列,如果是rearfront的情况,那么就应该是n=rear-front+1+m;此时rear-front是一个负数。所以将其综合一下就是:(rear-front+1+m)%m。2,关于函数重载(国民技术的笔试题)下面选项和所给函数不能构成重载的是void test(char);A. void test(char,char) B. int test(char) C.int test(int) D.void test(int,int)当时看到这个题就很纳闷,记得函数重载就是参数类型、参数个数不一样就能构成函数的重载呀!这个是个自己记错了,以为函数返回值不一样也能构成重载,其实如果只是函数返回值不一样的话,编译器不能确认去匹配哪一个函数,编译就会出现错误。3. 宏的问题(MTK一道笔试题)#define call(x,y) x#yint x=10,y=5,xy=30;求x+y+call(x,y)当时就晕了,不懂哇,其实以前见过这种#的,当时完全记不得了,不牢固哇。其实x#y就是xy,所以这个题答案应该是:452. 字符串提取数字完成函数void take_num(const char *strIn, int *n, unsigned int *outArray)如输入strIn=ab00cd+123fght456-253.005fgh输出n=6outArray= 0, 123, 456, 25, 3, 5 不考虑小数如3.005输出3和5题目分析:将字符串转换成uint,按公式temp=0;temp=temp*10;temp+=stri-0;一直循环。对于一个数,如果前面是0的话,那么按上面公式也会把0去掉的,也就是会从第一个非零的数开始计数。比如005,temp=0;temp=temp*10(temp=0);temp+=stri-0(temp=0);当i=i+1时,按上面过程计算,仍然有temp=0,直到第一个非零的数字出现,这也正符合数的形式。cpp view plaincopy1. #include2. #include3. #include4. voidtake_num(constchar*strIn,int*n,unsignedint*outArray)5. 6. assert(strIn!=NULL&n!=NULL&outArray!=NULL);7. intnCount=0;8. intlent=strlen(strIn);9. inttemp=0;10. boolIsNum=false;11. for(inti=0;i=0&strIni=9)14. 15. IsNum=true;16. temp=temp*10;17. temp+=strIni-0;18. 19. else20. if(IsNum)21. 22. outArraynCount=temp;23. nCount+;24. IsNum=false;25. temp=0;26. 27. 28. if(IsNum)/一定要对最后一个进行判断,否则就会丢失最后一个数的信心29. 30. outArraynCount=temp;31. nCount+;32. 33. *n=nCount;34. 35. voidmain()36. 37. charstr100=ab00cd+123fght456-253.005fgh12;38. intn=0;39. unsignedintoutstr100=0;40. take_num(str,&n,outstr);41. printf(%dn,n);42. for(inti=0;in;i+)43. 44. printf(%ut,outstri);45. 46. printf(n);47. 48. 其中返回的个数n和输出整型数的个数一样。可巧妙利用3. 高精度整数加法要求实现函数: void add (const char *num1, const char *num2, char *result)【输入】num1:字符串形式操作数1,如果操作数为负,则num10为符号位- num2:字符串形式操作数2,如果操作数为负,则num20为符号位-【输出】result:保存加法计算结果字符串,如果结果为负,则result0为符号位。注:I、 当输入为正数时,+不会出现在输入字符串中;当输入为负数时,-会出现在输入字符串中,且一定在输入字符串最左边位置;II、输入字符串所有位均代表有效数字,即不存在由0开始的输入字符串,比如0012, -0012不会出现;III、 要求输出字符串所有位均为有效数字,结果为正或0时+不出现在输出字符串,结果为负时输出字符串最左边位置为-。示例 输入:num1 = 580num2 = -50输出:result = 530输入:num1 = 580num2 = -6001. #include2. #include3. #include4. voidconvert(char*str)/字符串倒序5. 6. intlent=strlen(str);7. for(inti=0;i=(lent-1)/2;i+)8. 9. inttemp=stri;10. stri=strlent-1-i;11. strlent-1-i=temp;12. 13. 14. voidadd(constchar*num1,constchar*num2,char*result)15. 16. assert(num1!=NULL&num2!=NULL&result!=NULL);17. intlen1=strlen(num1);/串长18. intlen2=strlen(num2);19. intret100=0;20. char*pNum1=(char*)num1;21. char*pNum2=(char*)num2;22. char*pResult=result;23. boolIsNum1PosInt=true;/判断符标记24. boolIsNum2PosInt=true;25. boolIsExchange=false;/是否交换两个数的信息标志位,将绝对值大的数放在第一个数上。26. if(*pNum1=-)27. 28. IsNum1PosInt=false;29. pNum1+;30. len1-;31. 32. if(*pNum2=-)33. 34. IsNum2PosInt=false;35. pNum2+;36. len2-;37. 38. if(*pNum1=0|*pNum2=0) /判断输入数据是否格39. 40. printf(errorinput!);41. return;42. 43. if(len1len2)/num1绝对值小于num244. 45. IsExchange=true;46. 47. else48. if(len1=len2) /长度相等的情况下,是否需要交换49. 50. intj=0;51. for(j=0;jlen1;j+)52. 53. if(pNum1jpNum2j)54. 55. IsExchange=true;56. 57. 58. else59. break;60. 61. 62. if(IsExchange)63. 64. char*temp=pNum1;/交换字符串65. pNum1=pNum2;66. pNum2=temp;67. temp=NULL;68. 69. intlentemp=len1;/交换长度信息70. len1=len2;71. len2=lentemp;72. 73. boolIsPostemp=IsNum1PosInt;74. IsNum1PosInt=IsNum2PosInt;75. IsNum2PosInt=IsPostemp;76. 77. convert(pNum1);78. convert(pNum2);79. if(!IsNum1PosIntIsNum2PosInt) /同为正或者同为负80. 81. inti=0;82. for(i=0;i=len2) /后面的都置085. 86. pNum2i=0;87. 88. 89. reti+=(pNum1i-0)+(pNum2i-0);90. if(reti=10)91. 92. reti=reti%10;93. reti+1+;94. 95. 96. if(!IsNum1PosInt)/判断是两正数相加还是两负数相加97. 98. pResult0=-;99. pResult+;100. 101. if(reti=1)/如果有进位,长度加1102. 103. len1+;104. 105. 106. else/如果为一正一负,大数在前,小数在后,相减107. 108. inti=0;109. for(i=0;i=len2)112. 113. pNum2i=0;114. 115. reti+=(pNum1i-0)-(pNum2i-0);116. if(reti0)/如果小于0,则需要借位。117. 118. reti+=10;119. reti+1-;120. 121. 122. if(retlen1-1=0)123. 124. len1-;125. 126. if(!IsNum1PosInt)127. 128. pResult0=-;129. pResult+;130. 131. 132. for(intj=0;jlen1;j+)/将整型数组转换成字符串保存到结果字符串中133. 134. pResultj=*(char*)(ret+len1-1-j)+0;135. 136. 137. 138. 139. voidmain()140. 141. charn1100=-90;142. charn2100=50;143. charret100=;144. add(n1,n2,ret);145. puts(ret);146. 删除字符串中所有给定的子串问题描述: 在给定字符串中查找所有特定子串并删除,如果没有找到相应子串,则不作任何操作。要求实现函数: int delete_sub_str(const char *str, const char *sub_str, char *result_str)【输入】 str:输入的被操作字符串sub_str:需要查找并删除的特定子字符串【输出】 result_str:在str字符串中删除所有sub_str子字符串后的结果【返回】 删除的子字符串的个数注:I、 子串匹配只考虑最左匹配情况,即只需要从左到右进行字串匹配的情况。比如:在字符串abababab中,采用最左匹配子串aba,可以匹配2 个aba字串。如果匹配出从左到右位置2开始的aba,则不是最左匹配,且只能匹配出1个aba字串。cpp view plaincopy1. #include2. #include3. #include4. intdelete_sub_str(constchar*str,constchar*sub_str,char*result_str)5. 6. assert(str!=NULL&sub_str!=NULL&result_str!=NULL);7. intnCount=0;8. intlenstr=strlen(str);9. intlensubstr=strlen(sub_str);10. if(0=lensubstr|lensubstrlenstr)11. 12. strcpy(result_str,str);13. 14. inti=0,j=0;15. for(i=0;ilenstr;i+)16. 17. intk=i;18. for(j=0;jlensubstr;j+)19. 20. if(stri+j=sub_strj&j=lensubstr-1)21. 22. nCount+;23. i=i+lensubstr-1;24. 25. if(stri+j!=sub_strj)26. 27. break;28. 29. 30. 31. if(k=i)32. 33. *result_str=stri;34. result_str+;35. 36. 37. returnnCount;38. 39. 40. 41. voidmain()42. 43. charstrsrc100=aabababaababab;44. charstrdel100=aba;45. charresult100=;46. intn=delete_sub_str(strsrc,strdel,result);47. printf(%dn,n);48. puts(result);49. 算法就是最简单的算法,从左往右对比,每次源字符串都要回朔。判断如果没有相同子串,则赋给结果字符串。大数运算 分类: c/c+ 2011-09-04 21:47 66人阅读 评论(0) 收藏 举报 所谓的高精度运算,是指参与运算的数(加数,减数,因子)范围大大超出了标准数据类型(整型,实型)能表示的范围的运算。例如,求两个200位的数的和。这时,就要用到高 精度算法了。在这里,我们先讨论高精度加法。高精度运算主要解决以下三个问题:基本方法 1、加数、减数、运算结果的输入和存储 运算因子超出了整型、实型能表示的范围,肯定不能直接用一个数的形式来表示。能表示多个数的数据类型有两种:数组和字符串 (1)数组:每个数组元素存储1位(在优化时,这里是一个重点!),有多少位就需要多 少个数组元素; 用数组表示数的优点:每一位都是数的形式,可以直接加减;运算时非常方便 用数组表示数的缺点:数组不能直接输入;输入时每两位数之间必须有分隔符,不符合数 值的输入习惯; (2)字符串:字符串的最大长度是255,可以表示255位。 用字符串表示数的优点:能直接输入输出,输入时,每两位数之间不必分隔符,符合数值 的输入习惯; 用字符串表示数的缺点:字符串中的每一位是一个字符,不能直接进行运算,必须先将它 转化为数值再进行运算;运算时非常不方便; (3)因此,综合以上所述,对上面两种数据结构取长补短:用字符串读入数据,用数组存 储数据:cpp view plaincopy1. #include2. #include3. #include4. #definemax_strlen1005. voidconvert(char*num)6. 7. assert(num!=NULL);8. intstrlent=strlen(num);9. inttemp=0;10. for(inti=0;i=len2)?len1:len2;28. intretmax_strlen;29. memset(void*)ret,0,max_strlen*sizeof(int);30. 31. for(inti=0;i=len1)34. 35. num11i=0;36. 37. if(i=len2)38. 39. num22i=0;40. 41. reti+
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版大型活动铁艺背景墙制作与安装工程合同
- 2025年互联网+农业项目特色农产品销售合同范本
- 审计机构选人用人自查报告范文
- 2025版在线教育平台内容授权使用合同
- 2025版数码相机产品线上线下销售渠道合作合同
- 2025版水利建筑工程施工安全生产及环境保护协议
- 2025年托盘租赁与配送服务合同模板
- 2025年储罐保险合同模板:全面保障储罐安全
- 2025年特色主题餐厅承包合作协议范本
- 2025房地产会员房产交易税费减免咨询合同协议书
- 口腔种植人员管理制度
- 原发性乳腺癌规范化诊疗指南
- 2025年“健康中国”战略下医疗健康产业投资趋势报告
- 心脏肿瘤影像诊断与诊疗进展
- 旋挖钻孔灌注桩施工流程课件
- 《混凝土浇筑施工技术交底》课件
- 甘肃武威2025年公开招聘农村党务(村务)工作者笔试题带答案分析
- 内科常见疾病护理常规
- 钣金车间生产培训
- 人工智能的深度解析与浅显介绍
- 2024年全国体育单独统一招生考试语文试卷附答案
评论
0/150
提交评论