求一个数的各个位分别是多少

(1)求位数

eg:

123/1=123      i=1

123/10=12      i=2

123/100=1      i=3

123/1000=0    结束

从中我们可以看出要点如下:

①除数依次乘10

②每次除完都要进行判断,直到出现商为0停止

③要有一个负责计数的变量依次递增。

方法:1:使用for

int Digit_place(int n)
{
    int digit = 0;
    for (int i = 1; (n/i)!=0; i = i * 10, digit++);
    return digit;
}

方法2:使用while

int Digit_place(int n)
{
    int digit = 0;
    while (n != 0)
    {
        n = n / 10;
        digit = digit + 1;
    }
    return digit;
}

区别:我觉得虽然本质上相同,但用while更容易理解。

(2)输出各位的数字

方法1:

123%10=3

123%100=23             23/10=2

123%1000=123         123/100=1

从中我们可以看出要点如下:

①归纳总结出规律 n % j/(j/10 )(n为输入的整数,j的初值为10,每次循环都*10)

方法2:

123/100=1        123%100=23

23/10=2             23%10=3

3/1=3                   3%1=0

方法1:从个位开始输出

void prin_t(int n)//打印出每一位
{
    int m = Digit_place(n);
    
        for (int j = 10,i=1; i<=m; j=j*10,i++)
        {
            printf("\n从右向左数第%2d位是%2d\n", i,(n % j/(j/10 )));
        }
}

方法2:从最高位开始输出

void prin_t(int n)//打印出每一位
{
    int m = Digit_place(n);
    
    int index=1;
    for (int i = 1; i < m; i++)
    {
        index = index * 10;
    }
    while (n != 0)
    {
        printf("%d", n / index);
        n = n % index;
        index = index / 10;
    }
    printf("\n");
}

(3)逆着打印

参见(2):方法1

void reverse(int n)//逆序
{
    while (n != 0)

    {
        printf("%d", n % 10);
        n = n / 10;
    }
    printf("\n");
}

总的代码:

#include<stdio.h>


//题目二
int Digit_place(int n)
{
	int digit = 0;
	for (int i = 1; (n / i) != 0; i = i * 10, digit++);
	return digit;
}
//
void prin_t(int n)//打印出每一位
{
	int m = Digit_place(n);

	for (int j = 10, i = 1; i <= m; j = j * 10, i++)
	{
		printf("\n从右向左数第%2d位是%2d\n", i, (n % j / (j / 10)));
	}
}


void reverse(int n)//逆序
{
	while (n != 0)

	{
		printf("%d", n % 10);
		n = n / 10;
	}
	printf("\n");
}
//
int main()
{
	printf("请输入一个不多于五位的正整数\n");
	int n;
	scanf_s("%d", &n);
	
	printf("一共有%d位",Digit_place(n));
	prin_t(n);
	reverse(n);
}
//

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值