题目12 打印1到最大的n位数
/////////////////////////////////////////////////////////////////////////////////////
// 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位数的更多相关文章
- 剑指offer编程题Java实现——面试题12打印1到最大的n位数
题目:打印1到最大的n位数 输入数字n,按顺序打印输出从1到最大的n位十进制数,比如输入3,打印从1到999. 这道题考察的地方是如何表示大数问题.由于n是任意大的数组,如果n太大的话n位数就超过了l ...
- 面试题12:打印1到最大的n位数
// 面试题12_打印1到最大的n位数.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> ...
- 《剑指offer》面试题12 打印1到最大的n位数 Java版
书中方法:这道题的一个陷阱在于不能用int或者long去存储你要打印的数,然后用打印函数打印,因为这个数可能会很大.如果加1后超出了最大的n位数,就不打印了.用最高位是否进位判断是否结束,打印的时候注 ...
- 剑指Offer:面试题12——打印1到最大的n位数(java实现)
问题描述: 输入数字n,按顺序打印出从1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的3位数即999. 思路1:最简单的想法就是先找出最大的n位数,然后循环打印即可. public ...
- 剑指offer-面试题12.打印1到最大的n位数
题目:输入数字n,按照打印出从1最大的n位10进制数.比如3,则 打印出1.2.3一直到最大的3位数即999 1.你觉得如果面试会有这么简单的题,那 只能说明你---太天真. 2.n=3尚可,如果n= ...
- 12 打印1到最大的n位数
输入数字 n,按顺序打印出从 1 最大的 n 位十进制数.比如输入 3,则打印出 1.2.3 一直到最大的 3 位数即 999.由于 n 可能会非常大,因此不能直接用 int 表示数字,而是用 cha ...
- 剑指Offer面试题:11.打印1到最大的n位数
一.题目:打印1到最大的n位数 题目:输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则打印出1.2.3一直到最大的3位数即999. 二.不同的解法 2.1 不假思索的解法 最容易想到的办 ...
- 剑指Offer面试题:9.打印1到最大的n位数
一 题目:打印1到最大的n位数 题目:输入数字n,按顺序打印从1到最大的n位十进制.比如输入3,则打印出1.2.3一直到最大的3位数即999. 二 不考虑大数解法 // 打印从1到最大的n位数 voi ...
- 每天一道算法题(15)——打印1到最大的n位数
题目: 打印1到最大的n位数.如n=4,打印1-9999. 思路: 由于直接使用循环会导致int或者long long都不够存储.因此使用字符串来存储数据,这里涉及到数字转换成字符串以及字符串的加法. ...
随机推荐
- busTrace VS HW protocol analyzer - 好东西推荐
最近在找PCIe/NVMe协议分析仪,发现一款软件分析仪:busTRACE,非常不错的工具,对于从事协议开发的同胞们,是个福利,下面把硬件和软件两种分析仪的各自的优势比较了一下(来自busTrace文 ...
- 2019.6.28 校内测试 T3 【音乐会】道路千万条
大眼一看最下面的题意解释的话,发现这和洛谷P1310表达式的值挺像的,大概都是给定一些运算符号,让最后的表达式为true的概率,为false的概率啥的QwQ~: 然后这个题嘛?就是在所有的运算符中提溜 ...
- c++ 排序,<< 运算符重载
#include <iostream> #include <functional> #include <list> using namespace std; ost ...
- codeforces#101194H. Great Cells(数学)
题目链接: https://codeforces.com/gym/101194 题意: 在$n×m$的各自中填上$1$到$k$的数 定义Greate cell为严格大于同行和同列的格子 定义$A_g$ ...
- hibernate-validator校验框架学习
1.引入jar包 <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate ...
- 阿里云上搭建git
这篇文章我就来介绍一下如何在一台全裸的阿里云主机上搭建自己的git服务器. 1. 安装git 首先安装git,一般而言,现在的服务器已经内置了git安装包,我们只需要执行简单的安装命令即可安装.比如: ...
- vue2.0+vue-video-player实现hls播放的案例
1. 安装依赖. npm install vue-video-player --save 2. 在main.js引入vue-video-player. import VueVideoPlayer fr ...
- android在点击EditText的时候始终不弹出软件键盘
场景描述:正常情况下,当点击EditText时,软键盘会弹出来.现在的要求是当点击EditText时,弹日期选择对话框,选择的结果显示在EditText上.若不处理,当点击EditText时,软键盘和 ...
- Build Telemetry for Distributed Services之OpenCensus:C#
OpenCensus Easily collect telemetry like metrics and distributed traces from your services OpenCensu ...
- xcode报错: 找不到路径或者资源错误:no such file or directory
报错截图: 出现的问题: 运行项目页面图片不显示. 解决方法: 1>[COMMAND+shift+G],前往文件夹,输入: ~/Library/Developer/Xcode/DerivedD ...