【C语言】打印1到n位数。

在C语言中,打印1到n位数看似简单,但会遇到数据类型的上限问题。本文提出三种解决方案:1) 使用数组模拟多位数;2) 通过递归判断和输出;3) C++中的字符串操作(C语言中可用数组模拟)。重点在于处理数据溢出、输入输出正确性及中间可能出现的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    来看一个问题:

    打印1到n位数:(例如打印1到3位数,即输出1到999)

    第一眼看到这个题的时候感觉好简单。一个for循环不断输出就能够解决问题。但是大家仔细想一下。在语言中数据类型存在最大的上限值。最大的数据结构unsinged long long.

    它的最大值为:18446 74407 37095 51615.也就是20位。当我们想要输出1到21位数就会超出类型的最大值(早早就超出了)。

      所以我们该怎么设计这个程序呢?

      这里提供的思路一共有3种。

            1.运用数组。数组中的一个数组代表一个位。运用十进一的制度进行位的判断。从数组的最后元素进行输出。最后一位等于个位。倒数第二位等于十位。当我们只输出3位数时。我们选择多取一个数组元素进行下标的上限判断。当这个值为一。我们就跳出输出的循环。

            2.运用字符串。这个在C++中运用字符串的操作。若是在C中的话运用字符串还是运用数组。所以暂时不予讨论。

            3.运用递归。递归进行位数判断输出。限制输出的数量。3个递归的循环完成递归(应该是=。=)。

    下面给出数据输出的源代码:

#include <stdio.h>
#include <math.h>

//设定数组的长度,确定输出位数的最大值。50时。最大值为49.因为有一个用来判断位。
#define MAX_BIT 50

void printf_n(char num[],int m)
{
	int i = 0;
	num[MAX_BIT-m] = 1;
        //无限循环输出数组元素,当判断位为1.则跳出循环。
	while(1)
	{    
	        //利用十进一的制度。对数组所有值进行判断。
		if(num[MAX_BIT-1] == 10)
		{
			i = 1;
			do
			{
				num[MAX_BIT-i] = 0;
				num[MAX_BIT-i-1]++;
				i++;
			}while(i < MAX_BIT && num[MAX_BIT-i] == 10);
		}
		
		//判断位循环跳出。
		if(num[MAX_BIT-m-1] == 1)
		{
			break;
		}
		//输出当前数字。确定输出的位数值。
		for(i = MAX_BIT-m;i <= MAX_BIT-1;i++)
		{
			printf("%d",num[i]);
		}
		printf(" ");
		
		//个位加一。
		num[MAX_BIT-1]++;

	}

}

int main()
{
	int m = 0;
	int bit = 0;
	char num[MAX_BIT] = {0};
	printf("请输入需要打印的位数");
	scanf("%d",&bit);
	for(m = 1;m<=bit;m++)
	{
		printf_n(num,m);
	}
}

    这就是利用数组打印数字的代码。在拿到一个问题是。要考虑他所有应该出现的情况。

    1.数据的溢出。

    2.数据输入输出的正确性。

    3.数据中间可能出现的改变差错。

    4.设置目的可能出现的错误情况。


    game over。

本文出自 “剩蛋君” 博客,转载请与作者联系!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值