/////////////////////////////////////////////////////////////////////////////////////

// 2.打印1到最大的n位数

// 2.1 方法一:当N很大时,会有溢出问题!!!!
void Print1ToMaxOfDigits_1(int iLen)
{
int iNumber = 1;
while (iLen > 0)
{
iNumber *= 10;
iLen--;
} for (int i = 1; i < iNumber; i++)
{
if (i % 20 == 0 && i != 0)
{
putchar(10);
}
printf("%3d ", i);
}
putchar(10);
} // 2.2 方法二:字符串上模拟数字加法
bool Increment(char* pszBuff)
{
bool bOverFlow = false;
int iTakeOver = 0; // 进位
int iLen = strlen(pszBuff); for (int i = iLen - 1; i >= 0; i--)
{
int iSum = pszBuff[i] - '0' + iTakeOver; // 这里什么作用??? --> ++功能???
if (i == iLen - 1)
{
iSum++;
} if (iSum >= 10)
{
// 退出循环条件!!!
if (i == 0)
{
bOverFlow = true;
}
else
{
iSum -= 10;
iTakeOver = 1;
pszBuff[i] = '0' + iSum;
}
}
else
{
pszBuff[i] = '0' + iSum;
break;
}
} return bOverFlow;
} void PrintNumber(char* pszBuff)
{
bool bZero = true;
int iLen = strlen(pszBuff); for (int i = 0; i < iLen; i++)
{
// 不打印字符串前面的0
if (bZero && pszBuff[i] != '0')
{
bZero = false;
} if (!bZero)
{
printf("%c", pszBuff[i]);
}
}
} void Print1ToMaxOfDigits_2(int iLen)
{
if (iLen <= 0)
{
return;
} char* pszBuff = new char[iLen + 1];
memset(pszBuff, '0', iLen);
pszBuff[iLen] = '\0';
int iPrintLen = 0; while (!Increment(pszBuff))
{
PrintNumber(pszBuff);
printf(" ");
iPrintLen++;
if (iPrintLen % 20 == 0 && iPrintLen != 0)
{
putchar(10);
}
} putchar(10); // 释放内存
delete[] pszBuff;
pszBuff = NULL; } // 2.3 把问题转换成数字排列的解法
static int s_PrintNum = 0;
void Print1ToMaxOfDigitsRecursion(char* pszBuff, int iLen, int iIndex)
{
if (iIndex == iLen - 1)
{
PrintNumber(pszBuff);
printf(" ");
s_PrintNum++;
if (s_PrintNum % 20 == 0)
{
putchar(10);
} return;
} for (int i = 0; i < 10; i++)
{
pszBuff[iIndex + 1] = i + '0';
Print1ToMaxOfDigitsRecursion(pszBuff, iLen, iIndex + 1);
}
} void Print1ToMaxOfDigits_3(int iLen)
{
if (iLen <= 0)
{
return;
} char* pszBuff = new char[iLen + 1];
pszBuff[iLen] = '\0'; for (int i = 0; i < 10; i++)
{
pszBuff[0] = i + '0';
Print1ToMaxOfDigitsRecursion(pszBuff, iLen, 0);
} putchar(10); // 释放内存
delete[] pszBuff;
pszBuff = NULL;
} void Print1ToMaxOfDigitsTestFunc()
{
cout << "\n\n --------------- Print1ToMaxOfDigitsTestFunc Start -------------->" << endl;
int iNum = 2; cout << "方法一: " << endl; Print1ToMaxOfDigits_1(iNum); cout << "方法二: " << endl;
Print1ToMaxOfDigits_2(iNum); cout << "方法三: " << endl;
Print1ToMaxOfDigits_3(iNum); cout << "\n\n --------------- Print1ToMaxOfDigitsTestFunc End -------------->" << endl; }

题目12 打印1到最大的n位数的更多相关文章

  1. 剑指offer编程题Java实现——面试题12打印1到最大的n位数

    题目:打印1到最大的n位数 输入数字n,按顺序打印输出从1到最大的n位十进制数,比如输入3,打印从1到999. 这道题考察的地方是如何表示大数问题.由于n是任意大的数组,如果n太大的话n位数就超过了l ...

  2. 面试题12:打印1到最大的n位数

    // 面试题12_打印1到最大的n位数.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> ...

  3. 《剑指offer》面试题12 打印1到最大的n位数 Java版

    书中方法:这道题的一个陷阱在于不能用int或者long去存储你要打印的数,然后用打印函数打印,因为这个数可能会很大.如果加1后超出了最大的n位数,就不打印了.用最高位是否进位判断是否结束,打印的时候注 ...

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

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

  5. 剑指offer-面试题12.打印1到最大的n位数

    题目:输入数字n,按照打印出从1最大的n位10进制数.比如3,则 打印出1.2.3一直到最大的3位数即999 1.你觉得如果面试会有这么简单的题,那 只能说明你---太天真. 2.n=3尚可,如果n= ...

  6. 12 打印1到最大的n位数

    输入数字 n,按顺序打印出从 1 最大的 n 位十进制数.比如输入 3,则打印出 1.2.3 一直到最大的 3 位数即 999.由于 n 可能会非常大,因此不能直接用 int 表示数字,而是用 cha ...

  7. 剑指Offer面试题:11.打印1到最大的n位数

    一.题目:打印1到最大的n位数 题目:输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则打印出1.2.3一直到最大的3位数即999. 二.不同的解法 2.1 不假思索的解法 最容易想到的办 ...

  8. 剑指Offer面试题:9.打印1到最大的n位数

    一 题目:打印1到最大的n位数 题目:输入数字n,按顺序打印从1到最大的n位十进制.比如输入3,则打印出1.2.3一直到最大的3位数即999. 二 不考虑大数解法 // 打印从1到最大的n位数 voi ...

  9. 每天一道算法题(15)——打印1到最大的n位数

    题目: 打印1到最大的n位数.如n=4,打印1-9999. 思路: 由于直接使用循环会导致int或者long long都不够存储.因此使用字符串来存储数据,这里涉及到数字转换成字符串以及字符串的加法. ...

随机推荐

  1. VMWare Fusion 8 序列号

    FY75A-06W1M-H85PZ-0XP7T-MZ8E8 ZY7TK-A3D4N-08EUZ-TQN5E-XG2TF FG1MA-25Y1J-H857P-6MZZE-YZAZ6

  2. 【新词发现】基于SNS的文本数据挖掘、短语挖掘

    互联网时代的社会语言学:基于SNS的文本数据挖掘 python实现 https://github.com/jtyoui/Jtyoui/tree/master/jtyoui/word  这是一个无监督训 ...

  3. ERROR 1010 (HY000): Error dropping database (can't rmdir './zabbix/', errno: 17)

    在删除数据库的时候报标题所示错误 mysql> drop database zabbix; ERROR 1010 (HY000): Error dropping database (can't ...

  4. Java Collection Framework 备忘点

    最顶端是两个接口,集合和映射——  Collection<T>  /  Map<K, V> List 列表 保持插入顺序 ArrayList 擅长随机读 LinkedList ...

  5. 树莓派中将caplock映射为esc键

    据说,喜欢vimer都呵caplock有仇,明明caplock占着原来esc的位置,却从来没有起到应有的作用,你说气人吗,没关系,我改啊:将下面语句加入到.bashrc中,启动即可xmodmap -e ...

  6. DELPHI10.3.1安卓照相

    DELPHI10.3.1安卓照相 解决方法:

  7. Jenkins 自动化部署上线

    转载于互联网 jenkins自动化部署项目,通过jenkins 部署来节省运维时间,不需要手动cp上线及版本发布 Jenkins 自动化部署上线 Jenkins Jenkins 自动化部署上线一.Je ...

  8. test result

  9. 阿里云轻量应用服务器 配置mysql详解(转载)

    1.服务器规格 1.地域选择 考虑个人地址因素因此选择了华南. 2.选择应用镜像/系统镜像 这个应该看个人需求,因为我只是想用来放数据库的,所以就随便选了个WordPress. 选好之后购买就完事了, ...

  10. Python查询Mysql时返回字典结构的代码

    Python查询Mysql时返回字典结构的代码 MySQLdb默认查询结果都是返回tuple,输出时候不是很方便,必须按照0,1这样读取,无意中在网上找到简单的修改方法,就是传递一个cursors.D ...