剑指Offer面试题:11.打印1到最大的n位数
一、题目:打印1到最大的n位数
题目:输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。
二、不同的解法
2.1 不假思索的解法
最容易想到的办法是先求出最大的n位数,然后用一个循环从1开始逐个打印:
static void Print1ToMaxOfNDigitsSimple(int n)
{
int number = ;
int i = ; while (i < n)
{
number = number * ;
i++;
} for (i = ; i < number; i++)
{
Console.Write("{0}\t", i);
}
}
初看之下好像没有问题,但是其并没有考虑大数问题,有可能即使用整型(int)或长整型(long)都会溢出。
2.2 字符串模拟运算的解法
解决这个问题需要表达一个大数。最常用也是最容易的方法是用字符串或者数组表达大数。该算法的步骤如下:
Step1.把字符串中的每一个数字都初始化为'0';
Step2.每一次为字符串表示的数字加1,再打印出来;
static void Print1ToMaxOfNDigits(int n)
{
if (n <= )
{
return;
}
// memset(number,'0',n);
char[] number = new char[n + ];
for (int i = ; i < n; i++)
{
number[i] = '';
}
number[n] = '\0'; // Increment实现在表示数字的字符串number上增加1
while (!Increment(number))
{
// PrintNumber负责打印出number
PrintNumber(number);
} number = null;
} static bool Increment(char[] number)
{
bool isOverflow = false;
int takeOver = ;
int length = number.Length - ; for (int i = length - ; i >= ; i--)
{
int sum = number[i] - '' + takeOver;
if (i == length - )
{
sum++;
} if (sum >= )
{
if (i == )
{
// 标识已经溢出了
isOverflow = true;
}
else
{
sum -= ;
takeOver = ;
number[i] = (char)('' + sum);
}
}
else
{
number[i] = (char)('' + sum);
break;
}
} return isOverflow;
} static void PrintNumber(char[] number)
{
bool isBeginning0 = true; for (int i = ; i < number.Length; i++)
{
if (isBeginning0 && number[i] != '')
{
isBeginning0 = false;
} if (!isBeginning0)
{
Console.Write("{0}", number[i]);
}
} Console.Write("\t");
}
这里要注意的是:当数字不够n位的时候,我们在数字的前面补0,打印的时候这些补位的0不应该打印出来。
三、单元测试
3.1 封装测试入口
static void PrintTest(int n)
{
Console.WriteLine("Test for {0} begins:", n);
Print1ToMaxOfNDigits(n);
Console.WriteLine("Test for {0} ends.", n);
}
3.2 测试用例
static void Main(string[] args)
{
PrintTest();
PrintTest();
PrintTest();
PrintTest();
PrintTest(-); Console.ReadKey();
}
剑指Offer面试题:11.打印1到最大的n位数的更多相关文章
- 剑指Offer:面试题12——打印1到最大的n位数(java实现)
问题描述: 输入数字n,按顺序打印出从1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的3位数即999. 思路1:最简单的想法就是先找出最大的n位数,然后循环打印即可. public ...
- 剑指Offer - 九度1515 - 打印1到最大的N位数
剑指Offer - 九度1515 - 打印1到最大的N位数2013-11-30 01:11 题目描述: 给定一个数字N,打印从1到最大的N位数. 输入: 每个输入文件仅包含一组测试样例.对于每个测试案 ...
- 剑指offer——面试题11:旋转数组的最小数字
#include"iostream" using namespace std; int GetMinNumber(int *data,int len) { ,right=len-, ...
- 剑指Offer面试题11(Java版):数值的整数次方
题目:实现函数double Power(double base,int exponent),求base的exponent次方.不得使用库函数,同一时候不须要考虑大数问题 1.自以为非常easy的解法: ...
- 剑指Offer:面试题11——数值的整数次方(java实现)
题目描述: 实现函数double Power(double base, int exponent),求base的exponent次方,不得使用库函数,同时不需要考虑大数问题 思路:本题的重点考察内容是 ...
- 数值的整数次方(剑指offer面试题11)
实现函数 double Power(double base, int exponent),即乘方运算. 考虑问题 exponet < 0 , 可以转化为 1.0 / Power(base, -1 ...
- 剑指offer——面试题11:快速排序
#include"iostream" #include"random" using namespace std; /* void Swap(int &a ...
- 剑指offer面试题12-打印1到最大的n位数
题目: 输入一个数字n,按顺序打印出从1最大的n位十进制数.比方输入3,则打印出1.2.3最大的三位数即999 这道题的主要陷阱就在大数的处理,仅仅要将这个考虑进去,用字符串来表示.就好说了. 那差点 ...
- C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解
剑指offer 面试题23:从上往下打印二叉树 参与人数:4853 时间限制:1秒 空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...
- 剑指Offer——笔试题+知识点总结
剑指Offer--笔试题+知识点总结 情景回顾 时间:2016.9.23 12:00-14:00 19:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:笔试 注意事项:要有大局观, ...
随机推荐
- Tor网络突破IP封锁,爬虫好搭档【入门手册】
本文地址:http://www.cnblogs.com/likeli/p/5719230.html 前言 本文不提供任何搭梯子之类的内容,我在这里仅仅讨论网络爬虫遇到的IP封杀,然后使用Tor如何对抗 ...
- c语言快速入门2
如果你想快速入门计算机,可以参考我的上一篇帖子,先了解一些必备的软知识,然后再来进行语言的快速入门 计算机入门基础知识 c语言快速入门1 1.1.12 函数的概念 函数的定义:c语言的基本单位,c语言 ...
- left join 多个表关联时,将表值置换
/****** Script for SelectTopNRows command from SSMS ******/ SELECT B.[GOODSID] ,A.INDUSTRY_CNAME ,C. ...
- JS应用,表单上的一些东西
例: <body> <form>我的生日是哪一年? <input type="text" value="" id="t1 ...
- Daily Scrum Meeting ——SixthDay(Beta)12.14
一.Daily Scrum Meeting照片 二.Burndown Chart 三.项目进展(check-in) 1.完成注册界面中的学院.年级.身份选择. 2.补充参与者报名活动成功后按钮变为不可 ...
- jQuery实战
1.获取标签在文档中的位置 var left = $('.selected').offset().left; var top = $('.selected').offset().top; 2.获取选中 ...
- React News Site 新闻站
Learn React & Webpack by building the Hacker News front page from https://github.com/theJian/bui ...
- 图解HTTP
1.返回结果的HTTP状态码 a. 2xx 成功: 200 ok 204 No Content 206 Partial Content b. 3XX重定向:301 Moved Permanently ...
- python 基础之数据类型
一.python中的数据类型之列表 1.列表 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 二.列表常用操作 >切片>追加>插入>修改& ...
- CATransition(os开发之画面切换) 的简单用法
CATransition 的简单用法 //引进CATransition 时要添加包“QuartzCore.framework”,然后引进“#import <QuartzCore/QuartzCo ...