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++ 基本数据类型中int、long等整数类型取值范围及原理分析
这篇文章主要介绍了C++ 基本数据类型中int、long等整数类型取值范围及原理分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-11-11
C++ protobuf中对不同消息内容进行赋值的方式总结(set_、set_allocated_、mutable_、
这篇文章主要给大家介绍了关于C++ protobuf中对不同消息内容进行赋值的方式总结,主要使用的是set_、set_allocated_、mutable_、add_,文中通过实例代码介绍的非常详细,需要的朋友可以参考下2023-03-03


最新评论