C++實現(xiàn)打印1到最大的n位數(shù)
本文以實例形式講述了C++實現(xiàn)打印1到最大的n位數(shù)的方法。分享給大家供大家參考。具體方法如下:
題目要求:
輸入數(shù)字n,按順序打印出從1最大的n位十進制數(shù),比如輸入3,則打印出1,2 ,3一直到最大的3位數(shù)999
實現(xiàn)代碼如下:
#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++程序算法設(shè)計的學(xué)習(xí)有所幫助。
相關(guān)文章
Qt?加載?libjpeg?庫出現(xiàn)“長跳轉(zhuǎn)已經(jīng)運行”錯誤問題解決
這篇文章主要介紹了Qt?加載?libjpeg?庫出現(xiàn)“長跳轉(zhuǎn)已經(jīng)運行”錯誤,本文給大家分享完美解決方案,需要的朋友可以參考下2023-04-04
c++11?實現(xiàn)枚舉值到枚舉名的轉(zhuǎn)換問題
這篇文章主要介紹了c++11?實現(xiàn)枚舉值到枚舉名的轉(zhuǎn)換,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-03-03
windows系統(tǒng)下C++調(diào)用matlab程序的方法詳解
這篇文章主要給大家介紹了關(guān)于在windows系統(tǒng)下C++調(diào)用matlab程序的方法,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08

