打印1到最大的n位数
来源:互联网 发布:windows 2008 配置ad 编辑:程序博客网 时间:2024/06/09 06:10
题目:输入数字n,按顺序打印出从1到最大的n位十进制数。例如,输入3,打印1、2、3......999。
首先我们要考虑大数问题,接下来我们可以用字符串解决大数问题。
解法一:在字符串上模拟数字加法
思路:1、因为数字最大是n位,所以new一个长度为n+1的字符串,字符串最后一位是'\0'。数字不够n位,在字符串前面补0。
2、把字符串中的每一个数字都初始化为'0',然后在字符串表达的数字上模拟加法,最后把字符串表示的数字打印出来。
#include<iostream>using namespace std;void Printf(char* num){bool isBegin0 = true;int len = strlen(num);for (int i = 0; i < len ; ++i){if (isBegin0 && num[i] != '0')isBegin0 = false;//碰到第一个非0的字符才打印if (!isBegin0)printf("%c", num[i]);}printf("\t");}//在表示数字的字符串上加1bool Incement(char* num){int step = 0;bool isOverflow = false;int len = strlen(num);for (int i = len - 1; i >= 0; --i){int sum = num[i] - '0' + step;if (i == len - 1)sum++;if (sum >= 10){if (i == 0)isOverflow = true;elsesum -= 10;step = 1;num[i] = '0' + sum;}else{num[i] = '0' + sum;break;}}return isOverflow;}void PrintfNumber(int n){if (n <= 0)return;char* num = new char[n + 1];//new一个长度为n+1的字符串memset(num,'0',n);//字符串中的每一个数字都初始化为'0'num[n] = '\0';//在字符串表达的数字上模拟加法while (!Incement(num)){Printf(num);}delete[] num;}int main(){PrintfNumber(3);return 0;}
解法二:数字全排列
我们把数字的每一位从0到9排列一遍,就得到了所有的十进制数。全排列可以采用递归实现,递归结束的条件是设置了数字的最后一位。
#include<iostream>using namespace std;void Printf(char* num){bool isBegin0 = true;int len = strlen(num);for (int i = 0; i < len; ++i){if (isBegin0 && num[i] != '0')isBegin0 = false;if (!isBegin0)printf("%c",num[i]);}printf("\t");}void PrintfNR(char* num, int len, int index){if (index == len - 1)//数字的最后一位{Printf(num);return;}//递归设置数字的每一位,直到数字的最后一位for (int i = 0; i < 10; ++i){num[index + 1] = '0' + i;PrintfNR(num,len,index+1);}}void PrintfNumber(int n){if (n <= 0)return;char* num = new char[n + 1];num[n] = '\0';for (int i = 0; i < 10; ++i){num[0] = '0' + i;PrintfNR(num,n,0);}delete[] num;}int main(){PrintfNumber(3);return 0;}
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位数
- libuv学习笔记(13)
- 自定义View——FlowLayout
- HTTP协议:简介
- HTML+CSS:圆形和圆角图片格式
- 工作六年了
- 打印1到最大的n位数
- 补C++ 5
- ListView使用--文章集锦
- C++补做实验二
- 【caffe-Windows】微软官方caffe之 matlab接口配置
- wait3,wait4 用法
- androidUI框架
- java编程:斐波那契数列经典案例:兔子问题
- RegExp 正则表达式