数据结构-打印1到最大的n位数

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

分析:本题最关键的部分是当n值非常大的时候会超出数据类型的范围。偷个懒,没有实现打印1,2,3....999.可以利用分割把string分割成char[]。然后单个的char转为int再进行加减法,作为输出。


/*
剑指offer面试题12
该问题主要考虑到数据非常大超出数据类型的范围
*/
#include <iostream>
#include <cstring>
using namespace std;

void printMaxNum(int n){
string str = "9";
string result = "";

if(n <= 0){
return;
}
else{
for(int i=0;i<n;i++){
result += str;
}
cout << result << endl;;
}
}

int main()
{
int n;
cin >> n;

printMaxNum(n);

return 0;
}

数据结构-打印1到最大的n位数

时间: 2024-11-07 14:52:45

数据结构-打印1到最大的n位数的相关文章

剑指OFFER之打印1到最大的N位数(九度OJ1515)

题目描述: 给定一个数字N,打印从1到最大的N位数. 输入: 每个输入文件仅包含一组测试样例.对于每个测试案例,输入一个数字N(1<=N<=5). 输出: 对应每个测试案例,依次打印从1到最大的N位数. 样例输入: 1 样例输出: 1 2 3 4 5 6 7 8 9 解题思路: 直接通过n快速指定比最大的那个数大1的数,10,100,1000,10000,100000.... 输出,就行了... 代码: #include <stdio.h> int main(void){ int

剑指offer (12) 打印1到最大的n位数

题目描述: 给定一个数字N,打印从1到最大的N位数 此题需要注意以下几点: 1. 涉及到大数问题,因为并没有限定 n的取值范围,所以需要采取 字符数组模拟大数运算 2. 打印数字时 需要忽略前置0 3. 我们始终 以n位数为整体,n位所有十进制数其实是 n位从0到9的全排列,可以采用递归解决 我们从 数组下标0开始 (对应于数字最高位),每一位都有0到9取值,然后设置下一位,递归的结束条件是 设置位到了数组的最末端 1 void PrintNum(char* num) 2 { 3 char* c

【C语言】打印1到最大的n位数

//打印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[

打印1到最大的n位数----java实现

题目:输入数字n,按顺序打印出从1到最大的n位十进制数.比如,输入3,则打印出1,2,3,.....,一直到最大的3位数即999. 分析: 1.这是一个典型的大数加法问题,无论是int还是long long类型多无法表示.所以在解决大数问题时,通常是使用字符串或者数组实现其功能(由于个人比较钟爱数组,所以下面代码是使用数组实现的). 2.在大数的加法中,我们需要注意的问题是进位问题. 3.在该题中还需要判断是否为最大的n位整数.这里需要一个小技巧,我们只需判断最高位(第n位)是否要进位,如果需进

面试题17:打印1到最大的n位数

// 面试题17:打印1到最大的n位数 // 题目:输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则 // 打印出1.2.3一直到最大的3位数即999. 解题思路: 首先是一个大陷阱,n有多大?万一大到long long类型都盛不下,你要直接动手写,那写的再正确也是凉凉. 我们考虑到用字符来表示数字,然后把字符打印出来就行了. 书上巴拉巴拉说了一种很复杂的方法,代码量大也比较繁琐,感兴趣的去参考资料看就行了. 这里直接介绍第二种简单的方法,其实打印出从1最大的n位十进制数,实际就是

《剑指offer》第十七题:打印1到最大的n位数

// 面试题17:打印1到最大的n位数 // 题目:输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则 // 打印出1.2.3一直到最大的3位数即999. #include <cstdio> #include <memory> void PrintNumber(char* number); bool Increment(char* number); void Print1ToMaxOfNDigitsRecursively(char* number, int length

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

题目:输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则打印出1,2,3一直到最大的3位数即999. 此题很容易误入陷阱! //第一次解法,不幸调入陷阱 void print(int n) { if (n<1) { printf("Invalid Input!\n"); return; } long maxNum=(int)pow(10.0,n);//如果n很大,不论int还是long都会溢出 for (int i=0; i<maxNum; i++) { pri

打印1到最大的n位数

题目:输入数字n,按顺序打印出1到最大的n位十进制数.比如输入3,则打印出1.2.3一直到最大的3位数即999. 在不考虑大数的情况下,直接循环打印直到最大的数. 在考虑大数的情况下: 1.开辟n+1个空间的char型数组来保存数字,最后一位赋值为‘\0’,并且数字最高位对应数组的0下标: 2.构建函数bool Increment(char * number)实现数字的加1操作并且判断是否溢出: 3.循环调用Increment函数,溢出则终止循环,否则调用Print函数打印数字. 代码如下: v

算法题:打印1到最大的n位数

说明:本文仅供学习交流,转载请标明出处,欢迎转载! 今天看到剑指offer上的第12题,题目例如以下: 输入数字n.按顺序打印出从1到最大的n位十位数. 比方输入3,则打印出1,2,3,...,999. 当我看到这个题目的时候.第一感觉就是用递归,为什么呢?首先得从我们的一个实际数字出发,比方123.我们对数字加1,实际上分为例如以下两个步骤: 步骤1:最低位加1: 步骤2:若发生进位,则向更高位传播该进位的影响(这也是递归的所在). 在完毕这个算法题之前.我想插一句"细节决定成败!"