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++法式算法設計的進修有所贊助。