C++实现打印1到最大的n位数

 更新时间:2014年09月18日 09:35:31   投稿:shichen2014  
这篇文章主要介绍了C++实现打印1到最大的n位数,并分析了实现代码中语句的跳转技巧,需要的朋友可以参考下

本文以实例形式讲述了C++实现打印1到最大的n位数的方法。分享给大家供大家参考。具体方法如下:

题目要求:

输入数字n,按顺序打印出从1最大的n位十进制数,比如输入3,则打印出1,2 ,3一直到最大的3位数999

实现代码如下:

#include <iostream>

using namespace std;

void printArray(char *array, int size)
{
 if (array == NULL || size <= 0)
 {
 return;
 }

 int index = 0;
 while (array[index] == '0')
 index++;

 for (int i = index; i != size; i++)
 printf("%c", array[i]);

 cout << endl;
}

void printNumbers(int n)
{
 if (n <= 0)
 {
 return;
 }

 char *array = new char[n + 1];
 if (array == NULL)
 {
 throw("allocate memory error");
 return;
 }

 memset(array, '0', n);
 array[n] = 0;

 while (true)
 {
 int takeOver = 0;
 for (int i = n - 1; i >= 0; i--)
 {
  int num = array[i] - '0';
  if (i == n - 1)
  {
  num++;
  }
  else
  {
  num += takeOver;
  takeOver = 0;
  }

  if (num == 10)
  {
  if (i == 0)
   goto here;
  array[i] = '0';
  takeOver = 1;
  }
  else
  {
  array[i] = num + '0';
  break;
  }
 }

 printArray(array, n);
 }

here:
 delete []array;
}

void main()
{
 int n = 3;
 printNumbers(n);
}

这里一定要注意break的使用
array[i] = num + '0';
break;
由于此break的存在,使得takeOver不用重新置为0
也就是说

while (true)
{
 int takeOver = 0;
 for (int i = n - 1; i >= 0; i--)
 {
 int num = array[i] - '0';
 if (i == n - 1)
 {
  num++;
 }
 else
 {
  num += takeOver;
  //takeOver = 0;
 }

 if (num == 10)
 {
  if (i == 0)
  goto here;
  array[i] = '0';
  takeOver = 1;
 }
 else
 {
  array[i] = num + '0';
  break;
 }
 }

 printArray(array, n);
}

希望本文所述对大家C++程序算法设计的学习有所帮助。

相关文章

  • C++使用opencv调用级联分类器来识别目标物体的详细流程

    C++使用opencv调用级联分类器来识别目标物体的详细流程

    所谓级联分类器其实就是把分类器按照一定的顺序联合到一起,下面这篇文章主要给大家介绍了关于C++使用opencv调用级联分类器来识别目标物体的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • C语言实现个人财务管理

    C语言实现个人财务管理

    这篇文章主要为大家详细介绍了C语言实现个人财务管理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • C语言/C++中如何产生随机数

    C语言/C++中如何产生随机数

    这里要用到的是rand()函数, srand()函数,和time()函数。需要说明的是,iostream头文件中就有srand函数的定义,不需要再额外引入stdlib.h;而使用time()函数需要引入ctime头文件
    2013-10-10
  • 聊聊C语言中sizeof运算符的一个陷阱

    聊聊C语言中sizeof运算符的一个陷阱

    在C语言中,sizeof()是一个判断数据类型或者表达式长度的运算符,下面这篇文章主要给大家介绍了关于C语言中sizeof运算符的一个陷阱的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • C语言实现C++继承和多态的代码分享

    C语言实现C++继承和多态的代码分享

    本文主要给大家简单讲诉了C和C++的区别以及如何使用C语言模拟实现C++继承和多态,并附上示例代码,是篇相当不错的文章,推荐给喜欢C语言的小伙伴们
    2017-07-07
  • 详解C++赋值操作符重载

    详解C++赋值操作符重载

    这篇文章主要介绍了C++赋值操作符重载的相关资料,帮助大家更好的理解和学习c++,感兴趣的朋友可以了解下
    2020-08-08
  • 一起来学习C语言的输入和输出

    一起来学习C语言的输入和输出

    这篇文章主要为大家详细介绍了C语言的输入和输出,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • OpenCV实现马赛克和毛玻璃滤镜效果

    OpenCV实现马赛克和毛玻璃滤镜效果

    这篇文章主要为大家详细介绍了OpenCV实现马赛克和毛玻璃滤镜效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • C++中的函数返回值问题

    C++中的函数返回值问题

    这篇文章主要介绍了C++中的函数返回值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • C语言简明清晰讲解枚举

    C语言简明清晰讲解枚举

    枚举法的本质就是从所有候选答案中去搜索正确的解,枚举算法简单粗暴,他暴力的枚举所有可能,尽可能地尝试所有的方法,感兴趣的朋友来看看吧
    2022-05-05

最新评论