当前位置:   article > 正文

用字符串来实现加1操作

用字符串来实现加1操作
  1. #include <stdio.h>
  2. #include<string.h>
  3. int Increment(char *number);
  4. void printnumber(char *number);
  5. void print(int n)
  6. {
  7. if(n<=0)
  8. return;
  9. char *number =new char[n+1];
  10. memset(number,'0',n);
  11. number[n]='\0';
  12. while(!Increment(number))
  13. {
  14. printnumber(number);
  15. }
  16. delete [] number;
  17. }
  18. int Increment(char *number)
  19. {
  20. int isoverflow=0;
  21. int ntakeover=0;
  22. int nlen=strlen(number);
  23. for(int i=nlen-1;i>=0;i--)
  24. {
  25. int nsum=number[i]-'0'+ntakeover; //ntakeover是前一步的进位
  26. if(i==nlen-1) //刚开始运算时第一位数字是0,故要加1
  27. nsum++;
  28. if(nsum>=10)
  29. {
  30. if(i==0)
  31. isoverflow=1; //第一位有进位,则溢出
  32. else
  33. {
  34. nsum-=10;
  35. ntakeover=1;
  36. number[i]='0'+nsum;
  37. }
  38. }
  39. else
  40. {
  41. number[i]='0'+nsum;
  42. break;
  43. }
  44. }
  45. return isoverflow;
  46. }
  47. void printnumber(char *number)
  48. {
  49. int isbeginning=1;
  50. int nlen=strlen(number);
  51. for(int i=0;i<nlen;i++)
  52. {
  53. if(isbeginning&&number[i]!='0')
  54. isbeginning=0;
  55. if(isbeginning==0)
  56. printf("%c",number[i]);
  57. }
  58. printf("\t");
  59. }
  60. int main()
  61. {
  62. int n;
  63. scanf("%d",&n);
  64. print(n);
  65. return 1;
  66. }


参考剑指offer——面试题12:打印1到最大的n位数

难点是在加1操作的处理——该程序加1操作的同时再加上前一步留下来的进位,然后再判断当前值是否大于9,如大于9,则当前位取个位上的数,进位置1,否之当前位直接取当前值。如果是模拟乘法运算,如n的阶乘,则要考虑进位大于10的情形。见http://blog.csdn.net/nanfeng224/article/details/39338835

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/63489
推荐阅读
相关标签
  

闽ICP备14008679号