题目:输入数字,按顺序打印出从1到最大的n位十进制数。
分析:由于存在大数可能,所以用字符串存储大数。
#include <stdio.h>
#include <malloc.h>
#include <string.h>
void print_number(char *number)//打印,去掉前面的'0'
{
int len = strlen(number);
int i;
bool isbeginning0 = true;
for(i=0;i<len;i++)
{
if(isbeginning0 && number[i]!='0')
isbeginning0 = false;
if(!isbeginning0)
printf("%c",number[i]);
}
printf("\t");
}
bool increament(char *number)//判断有没有到达最大值,造成溢出
{
bool isoverflow = false;//溢出标志位
int takeover = 0;//进位
int len = strlen(number);
int i,sum;
for(i=len-1;i>=0;i--)
{
sum = number[i]-'0'+ takeover;
if(i==len-1)
sum++;
if(sum>=10)
{
if(i==0)//最高位
isoverflow=true;
else
{
sum -= 10;
takeover = 1;
number[i] = '0'+sum;
}
}
else
{
number[i] = '0'+sum;
break;
}
}
return isoverflow;
}
void print1ton(int n)
{
if(n<=0)
return;
char *number = (char*)malloc(sizeof(char)*(n+1));//创建n+1字符数组
memset(number,'0',n);//初始化全为'0'
number[n] = '\0';
while(!increament(number))
print_number(number);
printf("\n");
free(number);
number = NULL;
}
int main()
{
int n;
printf("请输入位数n:\n");
scanf("%d",&n);
printf("1到%d位十进制数为:\n",n);
print1ton(n);
return 0;
}