-
题目描述:
-
给定一个数字N,打印从1到最大的N位数。
-
输入:
-
每个输入文件仅包含一组测试样例。
对于每个测试案例,输入一个数字N(1<=N<=5)。
-
输出:
-
对应每个测试案例,依次打印从1到最大的N位数。
-
#include<iostream> using namespace std; bool Increment(char *a) { bool isOverFlow = false; //第一位是否产生进位,若产生进位,说明已经是最大的n位数 int nTakeOver = 0; //产生进位 int len = strlen(a); for (int i = len - 1; i >= 0; i--) { int nSum = a[i] - '0' + nTakeOver; if (i == len - 1) nSum++; //每次在上一次的值上加1 if (nSum >= 10) { if (i == 0) //nSum>=10且是第一位,说明已经打印了最大的数, isOverFlow = true; //比如99,当第一位(左一)等于10时,说明此时已经到达最大的数 else { nSum -= 10; nTakeOver = 1; a[i] = nSum + '0'; } } else //当前数小于10,直接输出就行了 { a[i] = nSum + '0'; break; } } return isOverFlow; } void PrintNumber(char *a) { int i = 0; while (a[i] == '0') i++; puts(a+i); } int main() { int n; cin >> n; char *a = new char[n + 1]; memset(a,'0',n); a[n] = '\0'; while (!Increment(a)) PrintNumber(a); delete[] a; a = NULL; }