打印1到最大的n位数(C语言)
2018-01-08 23:56
337 查看
打印1到最大的n位数(C语言)
思想+程序阅读之前注意:
本文阅读建议用时:20min本文阅读结构如下表:
项目 | 下属项目 | 测试用例数量 |
---|---|---|
思想+程序 | 无 | 1 |
思想+程序
思想:用字符串来表示大数,并实现加法
打印的时候注意符合阅读习惯(本程序未实现该功能)
程序参考以下代码:
#include<stdio.h> #include<stdlib.h> #include<string.h> int check(char *str)//检查是否全为9 { int i = 0; int len = strlen(str); for (i = 0; i < len; i++) if (str[i] != '9') return 1; return 0; } void count(char *str, int n)//模拟进位机制 { if (str != '9') { str ++; return; } else { if (n == 0) return; str = '0'; count(str, n - 1); } } void printNum(int n) { printf("n:%d\n", n); int i = 0; int m = n - 1; char *str = (int *)malloc((n + 1)*sizeof(char)); for (i = 0; i < n; i++) str[i] = '0'; str = '\0'; while (check(str))//检查是否全为9 { for (i = 0; i < 10; i++) { if (str[m] != '9') { str[m]++; printf("%s\n", str); } else if (check(str))//检查 { str[m] = '0'; count(str, m - 1); printf("%s\n", str); } } } } void main() { int n; scanf_s("%d", &n); printNum(n); system("pause"); }
以上程序并不简洁,改进算法将在以后添加1
改进算法思路:采用排列组合的思想,可以遍历数的各种情况,第一个位置可以是0-9,第二个位置也是0-9… …如此递归。以排列组合来取代上面程序的模拟进位机制。
参考以下代码:
#include<stdio.h> #include<stdlib.h> #include<string.h> void count(char *str, int m) { int len = strlen(str); int i = 0; for (i = 0, str[m] = '0'; i < 10; i++)//当前位置实现0-9 { if (m == len - 1)//如果是个位上的数值变化就打印 printf("%s\n", str); if (m < len - 1)//如果当前位置不是个位 count(str, m + 1);//下一个位置实现0-9 str[m]++; } } void printNumber(int n) { int i = 0; char *str = (char *)malloc((n + 1)*sizeof(char)); for (i = 0; i < n; i++) str[i] = '0';//初始化字符串 str = '\0';//字符串末尾是'\0'作为结束s count(str, 0); } void main() { int n; scanf_s("%d", &n); printNumber(n); system("pause"); }
打印1到最大的n位数C语言
阅读之前注意
思想程序
问题源于《剑指Offer 名企面试官精讲典型编程题》何海涛先生著. ↩
相关文章推荐
- 【C语言】打印1到最大的n位数
- 【C语言】打印1到最大的n位数
- C语言 打印1到最大的N位数(输入3,打印1,2,3~999)
- 递减打印最大的N位数到1 (2015年 JXNU_ACS 算法组暑假第一次周赛)
- 打印从1到最大的n位数
- 面试题12:打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 面试题12:打印1到最大的n位数
- C语言输出从1到最大的n位数
- 打印1到最大的n位数
- 每天一道算法题(15)——打印1到最大的n位数
- 剑指offer-面试题12:打印1到最大的n位数
- 面试题12: 打印1到最大的n位数(递归解法,全排列的递归解法)
- 面试题12:打印1到最大的n位数
- [剑指offer-1515]打印1到最大的N位数
- 剑指offer-面试题12-打印1到最大的n位数
- 九度OJ-题目1515:打印1到最大的N位数
- 数据结构-打印1到最大的n位数
- 打印从1到最大的n位数