武汉c培训
达内武汉中心

15271940953

热门课程

武汉C++培训:输出1 -n位最大整数

  • 时间:2016-06-16
  • 发布:霜柒染
  • 来源:51CTO

/*
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;
}
上一篇:武汉C++培训:通讯录 写入文本文件
下一篇:武汉C++培训:C++实现计数排序
选择城市和中心
贵州省

广西省

海南省