输入数字n,按顺序打印出从0到最大n位十进制数

来源:互联网 发布:海纳百川软件下载 编辑:程序博客网 时间:2024/05/02 12:49

算法描述:

输入数字n,按顺序打印出从0到最大n位十进制数

算法实现:

/*************************************************************************> File Name: main.c> Author: cyf> Mail: XXX@qq.com> Created Time: 2016年05月22日 星期日 14时08分00秒 ************************************************************************/#include <stdio.h>#include <stdlib.h>#include <string.h>#include "print1ToMax.h"// ====================测试代码====================void Test(int n){    printf("Test for %d begins:\t", n);    print1ToMax_1(n);    print1ToMax_2(n);    printf("Test for %d ends.\n", n);}int main(){Test(1);Test(2);Test(3);Test(0);return 0;}

/*************************************************************************> File Name: print1ToMax.h> Author: cyf> Mail: XXX@qq.com> Created Time: 2016年05月22日 星期日 13时52分18秒 ************************************************************************/#ifndef _PRINT1TOMAX_H#define _PRINT1TOMAX_H#include <stdio.h>#include <stdlib.h>#include <string.h>/* * 输入数字n,按顺序打印出从0到最大n位十进制数 * 例如:输入3,输出:1,2,3,。。。99 * */void print1ToMax_1(int n);void print1ToMax_2(int n);#endif

/*************************************************************************> File Name: print1ToMax.c> Author: cyf> Mail: XXX@qq.com> Created Time: 2016年05月22日 星期日 13时53分23秒 ************************************************************************/#include "print1ToMax.h"int InCrement(char *number){int isOver = 0;int nStart = 0;int length = strlen(number);int i;for (i = length - 1; i>=0; i--){int nSum = number[i] -'0' + nStart;if (i == length - 1){nSum++;}if (nSum >=10){if (i == 0){isOver = 1;}else{nSum -= 10;nStart = 1;number[i] = '0' + nSum;}}else{number[i] = '0' + nSum;break;}}return isOver;}void printNumber(char *number){int ret = 1;int length = strlen(number);int i = 0;for (i=0; i<length; i++){if(ret&&number[i]!='0'){ret = 0;}if (!ret){printf("%c", number[i]);}}printf("\t");}void print1ToMax_1(int n){if (n <= 0)return ;char *number = (char *)malloc((n+1)*sizeof(char));memset(number, '0', n);number[n] = '\0';while ( !InCrement(number) ){printNumber(number);}printf("\n");free(number);}void Print1ToMaxRecursively(char *number, int length, int index){if (index == length - 1){printNumber(number);return ;}int i = 0;for (i = 0; i < 10; i++){number[index+1] = i + '0';Print1ToMaxRecursively(number, length, index+1);}}void print1ToMax_2(int n){if (n <= 0)return ;char *number = (char *)malloc((n+1)*sizeof(char));number[n] = '\0';int i = 0;for (i = 0; i < 10; i++){number[0] = i + '0';Print1ToMaxRecursively(number, n, 0);}free(number);}

.PHONY:clean allCC = gccCFLAGS = -g -O2 -WallBIN = mainall:$(BIN)%.o:%.c$(CC) -o $@ -c $(CFLAGS) $<clean:rm -rf *.o $(BIN)


0 0
原创粉丝点击