题目:输入数字n,按顺序打印出从1到n位十进制数,比如输入3,则打印出1、2、3一直到最大的3位数999
要求:
1、实现大整数的输入,例如输入的数超过了int、long的表示范围,应该采用大整数
2、特殊的输入,0、-1
C语言中大整数的的运算,使用字符串来实现的,本题的关键在于,从0开始,没有加1,然后输入对应位的最大数,然后继续加1,知道相加的数等于输入的数n为止。
下面是本程序的源码:
#include<stdio.h> #include<string.h> #define MAX 100 char *reverse(char *s); char *add_one(char *s); void print_MaxNum(char *s) { int length=strlen(s); char result[MAX]={0}; char str[MAX]="0"; printf("\n"); while(strcmp(s,add_one(str))!=0) { strcat(result,"9"); printf("%s\t位的最大值为:\t%s\n",str,result); } strcat(result,"9"); printf("%s\t位的最大值为:\t%s\n",str,result); } char *add_one(char *s) { char *str=reverse(s); int length=strlen(str); int cf=0,i=0,tmp; while(i<length) { if(i==0)tmp=cf+(str[i]-‘0‘)+1; else tmp=cf+(str[i]-‘0‘); if(tmp>=10) { str[i]=(tmp-10)+‘0‘; cf=1; } else { str[i]=tmp+‘0‘; cf=0; } ++i; } if(cf==1)str[length]=‘1‘; s=reverse(str); return s; } char *reverse(char *s) { int length=strlen(s); int i=0,j=length-1; char tmp; while(i<j) { tmp=s[i]; s[i]=s[j]; s[j]=tmp; ++i; --j; } return s; } int main() { printf("请输入一个数字字符串:\n"); char digit[MAX]={0}; scanf("%s",digit); if(digit!=NULL) { if(digit[0]==‘-‘) { printf("\n你输入的字符串(为负)有误!\n"); exit(0); } if(digit[0]==‘0‘) { printf("\n你输入的字符串(为0)没有最大值!\n"); exit(0); } } //print_MaxNum(digit); //printf("\n%s\n%s",add_one(digit)); print_MaxNum(digit); return 0; }
C语言中大整数的运算是比较重要的,至少大家要知道怎么去求,也可以自己写一下代码,练练手。
剑指offer:打印1到最大的n位数,布布扣,bubuko.com
原文:http://blog.csdn.net/litianpenghaha/article/details/22160677