/*
1.打印1到最大的n位数。
题目:输入数字n,按顺序打印出从1到最大的n位十进制数。
比如:输入3,则打印出1、2、3一直到最大的3位数999.
[陷阱]:这个题目很容易想到的办法就是先求出最大的数。
然后循环输出就可以了。
*/
#include<stdio.h>//自己想到的方法,从a[0]-a[n]依次输出每一位,一次只输出某一位的某个数字
int main()
{
int i = 0,j = 0,k = 0,input=3;//i为控制进位 j为每一位输出(个位,十位等)
//k为循环进位,input 为最大输出数
char a[] = "100000000";//模拟进位的储存器
while (j < input)//判断是否结束
{
while (j >= 0)//控制输出某位
{
printf("%c",a[j]);//输出一位数字
if (j == 0) //j==0时为个位 依次累加位数
{
if (a[j] == '9')//个位为9进位
{
for (k = 0; k < input;)//是否多次进位
{
if (a[k+1]<'9')
{
a[k + 1]++;
a[k] = '0';
if (a[k + 1] == '1'&&i<k+1)
i++;//开辟新的位数
break;
}
else
{
a[k] = '0';//个位制零
k++;
}
}
}
else
a[0]++;//个位自加
}
j--;//j 从高位 依次减少
}
printf(" "); //分割 每个数字
j = i;//让j为现在的最高位 例如:9 之后 10 j=i=1;
}
return 0;
}
#include<stdio.h>
#include<string.h>
#include<assert.h>
int add_num(char *arr,int num,int end)//网上一般逻辑模拟数字累加程序(稍微不同)
{ //num 输出位数n end 模拟空间最大值
assert(arr);
int is_carry = 0;//是否进位
int is_over = 1;//是否超过与溢出
int i = end-1;
char *arr1 = arr;
if (arr1[i] != 9)
{
arr1[i]++;
}
else
{
is_carry = 1;
arr[i] = 0;
while (1)
{
if (end-1 - (i - 1) >= num || i == 0)
{
printf("\n **** 输出结束! ****\n");
is_over = 0;
return is_over;
}
if (arr1[--i] != 9)
{
arr1[i] += is_carry;
is_carry = 0;
break;
}
else
{
arr1[i] = 0;
}
}
}
}
void show_num(char *arr,int num)//按位输出
{
int is_high = 0;
while (num>0)
{
if (*arr == 0&&is_high==0)
arr++;
else
{
printf("%d",(int)*arr++);
is_high = 1;
}
num--;
}
printf(" ");
}
int main()
{
char num[11] = { '\0' };
while (add_num(num, 3,11))
{
show_num(num,11);
}
return 0;
}
转载于:https://blog.51cto.com/shaungqiran/1696355