打印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
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的N位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1 到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的N位数
- __func__预定义标识符
- 仿网易选项卡制作
- web.xml中配置的那些事
- Android的线程
- jvm 内存
- 打印1到最大的n位数
- 1047. Student List for Course (25)
- c++中list、vector、set、map的区别
- 程序员应该坚持写技术博客
- Android - 消息机制与线程通信
- C++ 派生类的构造函数和析构函数
- 中科院软件所、计算所保研复试回忆
- 数据库设计三大范式
- window下caffe图像数据转换