打印1到最大的n位数

原创 2015年07月07日 16:49:24

惊恐题目:

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

       解决这个问题需要表达一大数。最常用也是最容易的方法是用字符串或者数组表达大数。

惊恐 在字符串上模拟数字加法的解法

      


惊恐 Increment代码如下:

bool Increment(char* number)
{
bool isOverflow = false;
int nTakeOver = 0;
int nLength = strlen(number);
for (int i = nLength - 1; i >= 0; i--)
{
int nSum = number[i] - '0' + nTakeOver;
if (i == nLength - 1)//字符串的最高位放的是个为数字
nSum++;
if (nSum >= 10)
{
if (i == 0)
isOverflow = true;
else
{
nSum -= 10;
nTakeOver = 1;
number[i] = '0' + nSum;
}
}
else
{
number[i] = '0' + nSum;
break;
}
}
return isOverflow;
}

        printNumber函数中只有碰到第一个非0的字符之后才开始打印,直至字符串的结尾。

void PrintNumber(char* number)
{
bool isBeginning0 = true;
int nLength = strlen(number);
for (int i = 0; i < nLength; ++i)
{
if (isBeginning0&&number[i] != '0')
isBeginning0 = false;
if (!isBeginning0)
{
printf("%c", number[i]);
}
}
printf("\t");
}

惊恐把问题转换成数字排列的解法

     如果在数字前面补0的话,就会发现n位所有十进制数其实就是n个从0到9的全排列。也就是说,把数字的每一位都从0到9排列一遍,就得到了所有的十进制数。只不过在打印的时候,数字排在前面的0不打印出来。

全排列使用递归实现。数字的每一位都可能是0~9中的一个数,然后设置下一位。递归结束的条件是我们已经设置了数字的最后一位。

void Print1ToMaxOFNDigits(int n)
{
if (n <= 0)
return;
char *number = new char[n + 1];
number[n] = '\0';
for (int i = 0; i < 10; ++i)
{
number[0] = i + '0';
Print1ToMaxOfNDigitsRecursively(number, n, 0);
}
delete[] number;
}


void Print1ToMaxOfNDigitsRecursively(char* number, int length, int index)
{
if (index == length - 1)
{
PrintNumber(number);//与前面解法的PrintNumber相同
return;
}
for (int i = 0; i < 10; ++i)
{
number[index + 1] = i + '0';
Print1ToMaxOfNDigitsRecursively(number, length, index + 1);
}
}




剑指Offer:面试题12——打印1到最大的n位数(java实现)

问题描述: 输入数字n,按顺序打印出从1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的3位数即999. 思路1:最简单的想法就是先找出最大的n位数,然后循环打印即可。public...
  • lilianforever
  • lilianforever
  • 2016年07月06日 11:07
  • 2630

【算法详解】打印1到最大的n位数

1. 问题描述 输入数字n,按顺序打印出从1到最大的n位十进制数。 比如输入3,则打印出1,2,3,... ,一直到最大的3位数即 999. 注意的问题:考虑大数的情形导致的溢出。 ...
  • robinjwong
  • robinjwong
  • 2014年03月04日 00:33
  • 1904

[剑指offer] 打印1到最大的n位数(JAVA实现)

最容易想到求出最大的n位数,然后从1开始循环打印,但是这样容易造成溢出,应考虑大数问题,所以,正确的解法如下。 解法1. 在字符串上模拟数字加法 解法2. 把问题转换成数字排列 代码: ...
  • u014730658
  • u014730658
  • 2016年08月20日 15:35
  • 817

【剑指offer】打印1到最大的n位数

剑指offer第12题,九度OJ测试通过。 题目描述: 给定一个数字N,打印从1到最大的N位数。 输入: 每个输入文件仅包含一组测试样例。 对于每个测试案例,输入一个数字N(1...
  • mmc_maodun
  • mmc_maodun
  • 2014年05月12日 23:59
  • 4024

打印1到最大的n位数(大数问题)

/****************************************************** 题目:输入数字n,按顺序打印出从1最大的n位十进制。比如输 入3,则打印出1,2,3,4...
  • walkerkalr
  • walkerkalr
  • 2014年03月06日 14:51
  • 1671

打印1到最大的n位数:大数问题,全排列实现

大数,全排列
  • a2320064997
  • a2320064997
  • 2017年06月27日 11:44
  • 312

12 打印1到最大的N位数(递归和非递归解法)

打印1到最大的N位数(递归和非递归解法)
  • u012150590
  • u012150590
  • 2016年06月01日 16:17
  • 841

打印1到最大的n位数(Java实现)

本题为剑指offer面试题12 package offer.day421; public class Demo1 { public static void main(St...
  • zjkC050818
  • zjkC050818
  • 2017年04月21日 13:06
  • 556

打印1到最大的n位数 Java

打印1到最大的n位数 Java, 大数BigInteger
  • u013238950
  • u013238950
  • 2016年03月05日 22:36
  • 970

Java之BigInteger(面试题12:打印1到最大的n位数)

1.  以《剑指offer 名企面试官精讲典型编程题》 - 面试题12:打印1到最大的n位数为例。 题目内容如下: 输入数字n,按顺序打印出从1到最大的n位十进制数。 比如输入3,则打印出1,2...
  • chen476328361
  • chen476328361
  • 2015年03月06日 10:41
  • 727
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:打印1到最大的n位数
举报原因:
原因补充:

(最多只允许输入30个字)