【C语言】打印1到n位数。
来源:互联网 发布:windows桌面分类框 编辑:程序博客网 时间:2024/05/22 14:15
来看一个问题:
打印1到n位数:(例如打印1到3位数,即输出1到999)
第一眼看到这个题的时候感觉好简单。一个for循环不断输出就能够解决问题。但是大家仔细想一下。在语言中数据类型存在最大的上限值。最大的数据结构unsinged long long.
它的最大值为:18446 74407 37095 51615.也就是20位。当我们想要输出1到21位数就会超出类型的最大值(早早就超出了)。
所以我们该怎么设计这个程序呢?
这里提供的思路一共有3种。
1.运用数组。数组中的一个数组代表一个位。运用十进一的制度进行位的判断。从数组的最后元素进行输出。最后一位等于个位。倒数第二位等于十位。当我们只输出3位数时。我们选择多取一个数组元素进行下标的上限判断。当这个值为一。我们就跳出输出的循环。
2.运用字符串。这个在C++中运用字符串的操作。若是在C中的话运用字符串还是运用数组。所以暂时不予讨论。
3.运用递归。递归进行位数判断输出。限制输出的数量。3个递归的循环完成递归(应该是=。=)。
下面给出数据输出的源代码:
#include <stdio.h>#include <math.h>//设定数组的长度,确定输出位数的最大值。50时。最大值为49.因为有一个用来判断位。#define MAX_BIT 50void printf_n(char num[],int m){int i = 0;num[MAX_BIT-m] = 1; //无限循环输出数组元素,当判断位为1.则跳出循环。while(1){ //利用十进一的制度。对数组所有值进行判断。if(num[MAX_BIT-1] == 10){i = 1;do{num[MAX_BIT-i] = 0;num[MAX_BIT-i-1]++;i++;}while(i < MAX_BIT && num[MAX_BIT-i] == 10);}//判断位循环跳出。if(num[MAX_BIT-m-1] == 1){break;}//输出当前数字。确定输出的位数值。for(i = MAX_BIT-m;i <= MAX_BIT-1;i++){printf("%d",num[i]);}printf(" ");//个位加一。num[MAX_BIT-1]++;}}int main(){int m = 0;int bit = 0;char num[MAX_BIT] = {0};printf("请输入需要打印的位数");scanf("%d",&bit);for(m = 1;m<=bit;m++){printf_n(num,m);}}
这就是利用数组打印数字的代码。在拿到一个问题是。要考虑他所有应该出现的情况。
1.数据的溢出。
2.数据输入输出的正确性。
3.数据中间可能出现的改变差错。
4.设置目的可能出现的错误情况。
game over。
本文出自 “剩蛋君” 博客,转载请与作者联系!
0 0
- 【C语言】打印1到n位数。
- 【C语言】打印1到最大的n位数
- 【C++】打印1到最大的n位数
- C语言 打印1到最大的N位数(输入3,打印1,2,3~999)
- C语言输出从1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的N位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 【C语言】主函数的参数探幽
- CSS3实战1-文本属性text-shadow的用法
- 【c语言】输出一组数中有2个出现了1次的数
- 引用CDN内容的方法总结
- 【c++】vector用法
- 【C语言】打印1到n位数。
- 【C语言】快速排序优质算法的动态显示和字符串的快排
- 【C项目】注释转换项目
- 【C语言】顺序表,数组
- 【C语言】数据结构——动态顺序表
- 【软件理论】MVC概念
- 【数据结构】单链表的倒置
- 【数据结构】寻找2个单链表相同的值
- 【C++】小项目——内存泄露检测器