C++完成打印1到最年夜的n位數。本站提示廣大學習愛好者:(C++完成打印1到最年夜的n位數)文章只能為提供參考,不一定能成為您想要的結果。以下是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++法式算法設計的進修有所贊助。