打印1到最大的n位数

来源:互联网 发布:红衣军 知乎 编辑:程序博客网 时间:2024/06/07 15:50

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

    分析:首先不可能定义int型的数,当输入的n稍微大一点就溢出了,所以一般要考虑用字符串模拟数字的解法。我们一共用了三个函数,第一个函数print用来打印某一个数字,Increment用来自增,但是要加上防溢出的机制,printMaxDigit是实现函数。总的代码如下:

#include<stdio.h>#include<stdlib.h>#include<string.h>void print(char *number)//打印某一个数字的函数{int len=strlen(number);//我们要判断首字母是否为0bool isbeginning0=true;for(int i=0;i<len;i++){if(isbeginning0&&number[i] != '0')isbeginning0=false;if(!isbeginning0)//字母为0的就不用打印,为了照顾我们的数字习惯printf("%c",number[i]);}printf("\t");}bool Increment(char *number)//自增的函数,每次加1{bool isflow=false;//判断是否溢出int len=strlen(number);int take=0;for(int i=len-1;i>=0;i--){int nsum=number[i]-'0'+take;//取出当前位的数if(i==len-1)nsum++;if(nsum>=10){if(i==0)//溢出isflow=true;else{nsum-=10;take=1;number[i]='0'+nsum;}}else{number[i]='0'+nsum;break;}}return isflow;}void printMaxDigit(int n)//判断{if(n<0)return;char *number=(char *)malloc(sizeof(char)*(n+1)); //申请n+1个空间,留一个用来进位memset(number,'0',n);//全部初始化number[n]='\0';//最后一位结束while(!Increment(number))//自增{print(number);//打印出对应的数字}free(number);}int main(){int n;while(scanf("%d",&n)!=EOF){printMaxDigit(n);printf("\n");}return 0;}

1 0
原创粉丝点击