题目:输入数字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语言中大整数的运算是比较重要的,至少大家要知道怎么去求,也可以自己写一下代码,练练手。