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

题目:打印1到最大的n位数 输入数字n,按顺序打印输出从1到最大的n位十进制数,比如输入3,打印从1到999. 这道题考察的地方是如何表示大数问题.由于n是任意大的数组,如果n太大的话n位数就超过了long型能够表示的范围,在面试题11求数值的整数次方的时候题目中已经明确的提示了不考虑大数问题,在这道题中,用字符串或者数组表示大数是一种很简单有效的方法.用字符串表示大数也适用于大数加法.大数减法和大数的乘法问题. 下面代码是使用数组方式实现大数的产生和打印,在这道题中要特殊考虑的地方是如果实现整…
// 面试题12_打印1到最大的n位数.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using namespace std; bool Increment(char *number) { bool isOverflow=false; ; int nLength=strlen(number); ;i>=;--i) { '+nTakeOver; ) nSum++; ) { )//若是首位满…
///////////////////////////////////////////////////////////////////////////////////// // 2.打印1到最大的n位数 // 2.1 方法一:当N很大时,会有溢出问题!!!! void Print1ToMaxOfDigits_1(int iLen) { ; ) { iNumber *= ; iLen--; } ; i < iNumber; i++) { == && i != ) { putchar()…
问题描述: 输入数字n,按顺序打印出从1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的3位数即999. 思路1:最简单的想法就是先找出最大的n位数,然后循环打印即可. public static void Print1ToMaxOfNDigits_1(int n){ int number = 1; int i = 0; while(i++ < n){ number *= 10; } //number-1是最大的n位数 for(int j = 1; j < number; j+…
输入数字 n,按顺序打印出从 1 最大的 n 位十进制数.比如输入 3,则打印出 1.2.3 一直到最大的 3 位数即 999.由于 n 可能会非常大,因此不能直接用 int 表示数字,而是用 char 数组进行存储. 使用回溯法得到所有的数. Java: public void printToMaxOfNDigits(int n) { if (n < 0) return; char[] number = new char[n]; printToMaxOfNDigits(number, -1);…
书中方法:这道题的一个陷阱在于不能用int或者long去存储你要打印的数,然后用打印函数打印,因为这个数可能会很大.如果加1后超出了最大的n位数,就不打印了.用最高位是否进位判断是否结束,打印的时候注意不要打印出前面可能出现的0. public void print(int n){ if(n<=0){ return; } //必须要用字符数组防止大数 char[] c = new char[n]; for(int i=0; i<n; i++){ c[i] = '0'; } while(!inc…
题目:输入数字n,按照打印出从1最大的n位10进制数.比如3,则 打印出1.2.3一直到最大的3位数即999 1.你觉得如果面试会有这么简单的题,那 只能说明你---太天真. 2.n=3尚可,如果n=30 300呢有这样的内置数据类型 能包括这么大的数吗? 3.说白了,这道题就是考察用字符串模拟大数. 算法思想如下: 1.分配大小为n+1个字符的内存 初始化为'0' 最后一个'\0' 2.模拟加法,每一位字符上的范围为'0'-'9'当超过之后进位, 3.结束条件,当第一位字符发生进位时说明已经遍…
面试题12:打印1到最大的n位数 剑指offer题目12,题目如下 输入数字n,按顺序打印出1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的三位数999 方法一 和面试题11<数值的整数次方>类似,乍看觉得都是简单题目,找出最大的n位数,开始逐个打印,写出代码 public static void method_1(int n ) { int num = 1; int i = 1; while(i <= n) { num *= 10 i++; } for(i = 1;i…
面试题12:打印1到最大的n位数 剑指offer题目12,题目如下 输入数字n,按顺序打印出1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的三位数999 方法一 和面试题11<数值的整数次方>类似,乍看觉得都是简单题目,找出最大的n位数,开始逐个打印,写出代码 public static void method_1(int n ) { int num = 1; int i = 1; while(i <= n) { num *= 10 i++; } for(i = 1;i…
[面试题012]打印1到最大的n位数  大数问题 字符串中的每一个字符都是‘0’到‘9’之间的某一个字符,用来表示数字中的一位,因为数字最大是n位的,因此我们需要一个长度为n+1的字符串,字符串的最后一个是结束符号‘\0’,当实际数字不够n位的是哦互,在字符串的前半部分补0. 我们要做的是,在字符串上面做模拟加法,然后把字符串表达的数字打印出来. 怎么判断增加的字符串是不是达到我们要求的最大的数字啦,这里很关键,isOverflow做判断, 打印函数,也得定制,因为当数字不够n位的时候,我们在数…
在练习剑指offer的时候,第12题打印1到最大的n位数的时候,想找个java版的,但大家要么用BigInteger做,要么给出其他的方法.我觉得要给就给最好的方法,下面是我自己参考C++代码写的java版的全排列方法. 代码: public class Quanpaixu { public static void print1ToMaxOfNDigits(int n){ if(n<=0) { return; } //生成相应位数大小的数组 int[] number = new int[n];…
一.题目:打印1到最大的n位数 题目:输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则打印出1.2.3一直到最大的3位数即999. 二.不同的解法 2.1 不假思索的解法 最容易想到的办法是先求出最大的n位数,然后用一个循环从1开始逐个打印: static void Print1ToMaxOfNDigitsSimple(int n) { ; ; while (i < n) { number = number * ; i++; } ; i < number; i++) { Cons…
打印1到最大的n位数----java实现 题目:输入数字n,按顺序打印出从1到最大的n位十进制数.比如,输入3,则打印出1,2,3,.....,一直到最大的3位数即999. 分析: 1.这是一个典型的大数加法问题,无论是int还是long long类型多无法表示.所以在解决大数问题时,通常是使用字符串或者数组实现其功能(由于个人比较钟爱数组,所以下面代码是使用数组实现的). 2.在大数的加法中,我们需要注意的问题是进位问题. 3.在该题中还需要判断是否为最大的n位整数.这里需要一个小技巧,我们只…
题目1515:打印1到最大的N位数 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:625 解决:323 题目描述: 给定一个数字N,打印从1到最大的N位数. 输入: 每个输入文件仅包含一组测试样例. 对于每个测试案例,输入一个数字N(1<=N<=5). 输出: 对应每个测试案例,依次打印从1到最大的N位数. 样例输入: 1 样例输出: 1 2 3 4 5 6 7 8 9 考察的就是大数据输入. 这种求全部组合的题目,一概可以用DFS来做.虽然本题Java中有自带BigIntege…
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则打印出1.2.3一直到最大的3位数即999. 思路 陷阱:n过大时是大数问题,不能简单用int或者long数据输出,需要采用字符串或者数组表达大数. 解决方法:通过字符数组char[]来进行输出数字. 方法一: 1)在字符串表达的数字上模拟加法: 2)把字符串表达的数字打印出来. 方法二: 1)采用递归将每一位都…
// 面试题17:打印1到最大的n位数 // 题目:输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则 // 打印出1.2.3一直到最大的3位数即999. #include <iostream> #include <string> using namespace std; void PrintNumber(char* number); bool Increment(char* number); void Print1ToMaxOfNDigitsRecursively(c…
一 题目:打印1到最大的n位数 题目:输入数字n,按顺序打印从1到最大的n位十进制.比如输入3,则打印出1.2.3一直到最大的3位数即999. 二 不考虑大数解法 // 打印从1到最大的n位数 void PrintNumbs(int n) { ; ;i <= n; i ++) { nMax = nMax* + ; } ; j <= nMax; j ++) { cout << j << endl; } } 三 字符串模拟算法解法 解决这个问题需要表达一个大数.最常用也是最…
题目: 打印1到最大的n位数.如n=4,打印1-9999. 思路: 由于直接使用循环会导致int或者long long都不够存储.因此使用字符串来存储数据,这里涉及到数字转换成字符串以及字符串的加法. 代码: 1.使用递归思路. 可以认为.从高位到低位,高位数先固定,在此情况下,低位数依次调整.每一位涉及0-9调整,这里每一级的都要嵌套10次. void printMax(char* number,const int index,const int size){//嵌套打印函数,size为总的位…
剑指Offer - 九度1515 - 打印1到最大的N位数2013-11-30 01:11 题目描述: 给定一个数字N,打印从1到最大的N位数. 输入: 每个输入文件仅包含一组测试样例.对于每个测试案例,输入一个数字N(1<=N<=5). 输出: 对应每个测试案例,依次打印从1到最大的N位数. 样例输入: 1 样例输出: 1 2 3 4 5 6 7 8 9 题意分析: 这题在OJ里完全没有陷阱,就是从1~99...99全部输出一遍,因为位数n是规定好了的.但如果是面试中面试官故意不告诉你n的范…
// 面试题17:打印1到最大的n位数 // 题目:输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则 // 打印出1.2.3一直到最大的3位数即999. 解题思路: 首先是一个大陷阱,n有多大?万一大到long long类型都盛不下,你要直接动手写,那写的再正确也是凉凉. 我们考虑到用字符来表示数字,然后把字符打印出来就行了. 书上巴拉巴拉说了一种很复杂的方法,代码量大也比较繁琐,感兴趣的去参考资料看就行了. 这里直接介绍第二种简单的方法,其实打印出从1最大的n位十进制数,实际就是…
面试题17:打印1到最大的n位数  题目:输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则打印出1.2.3一直到最大的3位数即999. 考点: 用字符串或者数组表达一个大数. 思路 1.由于不知道n的范围,n很大的时候,用int或者long long 可能会溢出. 2.用字符串表达大数.'0'-'9',因为是N位的数,用N+1的字符串存储,最后一位保存结束符'\0',前半部分补零. 3.strlen函数用法 function <cstring> strlen size_t str…
//打印1到最大的n位数 //输入数字n,按顺序打印出从1到最大的n位十进制数. 比方:输入3.则打印出1.2一直到最大的3位数999 #include <stdio.h> #include <stdlib.h> #include <memory.h> int num[10]; int add(int n) { int isoverflow = 0; int carry = 0; int i; for (i = 9; i >= 10 - n; i--) { num…
题目:输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则打印出1,2,3一直到最大的3位数999. 思路:先把字符串中的每一个数字都初始化为‘0’,然后每一次为字符串表示的数字加1,再打印出来.只需要做两件事:一是在字符串表达的数字上模拟加法,二是把字符串表达的数字打印出来.   测试用例: 1)功能测试(输入1,2,3.....) 2)特殊输入测试(输入-1,0)   代码实现: package com.yyq; /** * Created by Administrator on…
思路: 用n位字符数组表示n位数,通过递归的方式逐层(位)遍历,递归终止时打印. #include "stdio.h" #include "string.h" //打印“数字” void printNum(char* number) { //设置前导零状态为开启 bool ishead0 = true; ; i < strlen(number); i++) { //遇到第一个非零数,关闭前导零状态 ' && ishead0 == true) i…
题目: 输入数字n,按顺序打印出从1到最大的n位十进制数. 比如输入3,打印1,2,3一直到最大的3位数即999. 思路: 1.不考虑n的范围,直接打印. void Print1ToMaxOfNDigits_1(int n){ int number=1; for(int i=0;i<n) number=10*number; for(int i=1;i<number;i++) cout<<i<<"\t"; cout<<endl; } 2.如…
题目:输入数字 n.按顺序打印出从 1 到 最大的 n 位十进制数.比方输入 3 ,则打印出 1.2 .3 一直到最大的3位数即 999. 解析: easy知道不能用 int 等数字类型表示(大数问题) 在字符串上模拟数字加法 关键点: 1. 怎样用字符串表示n位数? 2. 怎样实现字符串数的自增操作? 3. 怎样打印一个字符串数? - 申请长度是n+1的字符数组number. number[0] 是最高位, number[n-1]最低位, number[n] = '\0' - 首先把字符串中的…
面试题是关于n位整数并且没有限定n的取值范围,或者是输入任意大小的整数,那么这个题目就很可能需要考虑大数问题.字符串是一个简单的.有效的表示大数的方法 这题比较难,用递归表达全排列,数字每一位都可能是0-9,从高位往低位设置 void Print1ToMaxOfNDigits_2(int n) { ) return; ]; number[n] = '\0'; ; i < ; ++i) { number[] = i + '; Print1ToMaxOfNDigitsRecursively(numb…
题目:输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则打印出1.2.3一直到最大的3位数即999. 考点:大数问题. 解决方案:在字符串上模拟数字加法. <剑指Offer>上的代码太复杂,我自己的代码如下所示: void increment(string&str) { int n = str.size(); ; ; --i) { ') { str[i] = '; } else { str[i] += ; return ; } } )//最高位进位 str = "…
说明:本文仅供学习交流,转载请标明出处,欢迎转载!        今天看到剑指offer上的第12题,题目例如以下:        输入数字n.按顺序打印出从1到最大的n位十位数. 比方输入3,则打印出1,2,3,...,999.        当我看到这个题目的时候.第一感觉就是用递归,为什么呢?首先得从我们的一个实际数字出发,比方123.我们对数字加1,实际上分为例如以下两个步骤:        步骤1:最低位加1:        步骤2:若发生进位,则向更高位传播该进位的影响(这也是递归的…
题目描述:给定一个数字N,打印从1到最大的N位数. 看起来像是很简单的问题(虽然实际也不是很难...)我们很容易写出这样的代码: #include<iostream> #include<cstdio> ,,,,}; using namespace std; int main() { int N; cin>>N; ;i<=a[N-];i++) { printf("%d\n",i); } } 但是这样还是有不少问题的,说的简单点这个N很大怎么办?你…