剑指offer—打印1到最大n位数
来源:互联网 发布:精通c语言薪水有多少 编辑:程序博客网 时间:2024/06/10 18:17
面试题12:
题目:输入数字n,按照顺序答应出从1最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的三位数即999。
对于这道题进行时,咱们会进行一些分析,当你输入3时,最大的三位数是999,这就是说这个最大的数是9*10^n-1+9 *10^n-2+。。。+9 *10^0。所以在这我想学习C语言的初学者都可以打出下面这个程序:
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>void print_number(int n){ int number = 1; int i = 0; while (i++<n) { number *= 10; } for (i = 1; i < number; i++) { printf("%d\n", i); }}int main(){ int n = 0; printf("请输入n:"); scanf("%d", &n); print_number(n); system("pause"); return 0;}
在这里我们我们就可以知道你所打印的最大数其实就是你的10^n-1。上述方法看似解决了这个问题,但是,还是以前的问题,咱们应该考虑一些边界因素和一些其他的因素,让代码做到最好。其实在这你就要想了,int的返回最大也就是2的32次方-1,所以,对于一个很大的数,这个程序是无法显示的。所以我们在这里要考虑大数的问题,在这里请你谨记,处理大数最容易也是最常用的方法就是字符串或者数组来表示。仔细想一想是不是这个道理呢,字符串可以放下无比庞大的数。接下来的问题,就是如何用字符串或者数组来表示呢?这也是在面试时考察你的一点,我想你很容易就能想到对于数字0-9,我们就使用字符‘0’-‘9’来表示。在这个表示的过程中,我们要注意字符串的NUL结束位,所以对一个含有n位的字符串,我们需要一个长度为n+1的字符串。当实际数字不够n位时,在字符串前半部分补0;这样我们先把字符串每一个数字初始化为‘0’,然后每次给字符加1,再打印,这样就可以了。
所以接下来我们可以写出更好的一种方法:
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<string.h>#include<stdlib.h>int Increment(char *num){ int isOverflow = 0; int len = strlen(num); int i; for (i = 0; i<len; i++) num[i] = num[i] - '0'; num[len - 1]++; for (i = len - 1; i >= 0; i--) { if (num[i] >= 10) { if (i == 0) { isOverflow = 1; num[i]--; } else { num[i] -= 10; num[i - 1] += 1; } } else break; } for (i = 0; i<len; i++) num[i] = num[i] + '0'; return isOverflow;}void Print_n(int n){ if (n <= 0) return; char *num = (char *)malloc((n + 1)*sizeof(char)); if (num == NULL) exit(EXIT_FAILURE); memset(num, '0', n*sizeof(char)); num[n] = '\0'; while (!Increment(num)) { int i = 0; while (num[i] == '0') i++; printf("%s\n", num + i); } free(num); num = NULL;}int main(){ int n; printf("请输入n:"); scanf("%d", &n); Print_n(n); system("pause"); return 0;}
1 0
- 剑指offer—打印1到最大n位数
- 剑指Offer之打印1到最大的N位数
- 剑指offer:打印1到最大的n位数
- 【剑指offer】打印1到最大的n位数
- [剑指Offer]打印1到最大的n位数
- 【剑指offer】打印1到最大的n位数
- 剑指Offer之打印1到最大的n位数
- 剑指Offer之 - 打印1到最大的n位数
- 剑指offer-12 打印1到最大的N位数
- 剑指offer 12 -打印1到最大的n位数
- 剑指offer:打印1到最大的n位数
- 剑指Offer-12-打印1到最大的n位数
- [剑指offer-1515]打印1到最大的N位数
- 剑指offer 打印1到最大的N位数
- 剑指Offer--012-打印1到最大的N位数
- 剑指Offer 打印1到最大的n位数
- 剑指Offer:打印1到最大的N位数
- 《剑指offer》:[16]打印1到最大的N位数
- 【1】Android体系与系统架构——Android群英传开发笔记
- (经典)POJ-1631 LIS,偏序问题
- 单片机程序风格和调试技巧(一)
- 关于两个变量值互换问题
- 设计模式(1)------工厂方法模式
- 剑指offer—打印1到最大n位数
- @class
- 《DEBUG HACKS》中文版笔记(二)
- shell脚本下常用的符号组合及转移字符
- HDOJ 1573 X问题 (余数不互质的中国剩余定理)
- android学习笔记(四)__xml和widget
- c语言学习笔记8之if语句
- 计算机网络 ip 子网掩码,子网数学习心得
- 啦啦啦啦~Django1.96---字段查询