打印1到最大的n位数

来源:互联网 发布:家谱制作软件 编辑:程序博客网 时间:2024/05/23 11:42

题目:

输入数字n,按顺序打印从1到最大的n位十进制数。比如输入3 ,则打印1,2,3 一直到999


当然有程序员会很容易想出一个答案:循环数字相乘-->打印

仔细分析:如果相乘的数字溢出怎么办?

那我们就得另外想办法了。

code:

<span style="font-size:14px;">void Print_1_To_Max(int n){if (n <= 0)return;char *number = new char[n + 1];memset(number, '0', n);number[n] = '\0';while (!Increase(number , n )){Print(number , n);}delete[] number;}</span><span style="font-size:18px;"></span>

上面的另外两个函数code:

bool Increase(char* number , int len ){bool Isoverflow = false;  //是否越界int step = 0;  //进位for (int i = len - 1; i >= 0; --i){int Sum = number[i] - '0' + step;if (i == len - 1)Sum++;if (Sum >= 10){if (i == 0)Isoverflow = true;  //sum>=10,i==0 说明在第一个字符产生越界else{Sum -= 10;step = 1;number[i] = '0' + Sum;}}else{number[i] = '0' + Sum;break;}}return Isoverflow;}void Print(char* number , int n ){if (number == NULL || n <= 0)return;bool flag = true;for (int i = 0; i < n; ++i){//采用flag主要是为了不打印前面的0 , 而可以打印数字后面的0  例如:20,200 。。。if (flag&&number[i] != '0')flag = false;if (!flag){printf("%c", number[i]);}}printf("\t");}

这样看起来是不是不是能解决问题了呢?

哈哈 ,我已经测试过 ,妥妥的。


如果有测试失败的话,记得留言,一起探讨。


AllOfCode:

bool Increase(char* number , int len ){bool Isoverflow = false;  //是否越界int step = 0;  //进位for (int i = len - 1; i >= 0; --i){int Sum = number[i] - '0' + step;if (i == len - 1)Sum++;if (Sum >= 10){if (i == 0)Isoverflow = true;  //sum>=10,i==0 说明在第一个字符产生越界else{Sum -= 10;step = 1;number[i] = '0' + Sum;}}else{number[i] = '0' + Sum;break;}}return Isoverflow;}void Print(char* number , int n ){if (number == NULL || n <= 0)return;bool flag = true;for (int i = 0; i < n; ++i){//采用flag主要是为了不打印前面的0 , 而可以打印数字后面的0  例如:20,200 。。。if (flag&&number[i] != '0')flag = false;if (!flag){printf("%c", number[i]);}}printf("\t");}void Print_1_To_Max(int n){if (n <= 0)return;char *number = new char[n + 1];memset(number, '0', n);number[n] = '\0';while (!Increase(number , n )){Print(number , n);}delete[] number;}



















0 0
原创粉丝点击