数字的处理与判断

文章介绍了两种方法在C语言中处理数字的位数及其正序和倒序输出。第一种利用字符数组和strlen函数,第二种使用while循环和pow函数。每种方法都包括确定位数、正序输出和倒序输出的步骤,注意处理结尾空格的情况。

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

先循环确定位数,再循环正序输出,还要循环倒序输出

几乎是相同的操作做了三遍

个人认为用字符数组来处理应该最为简便

解题思路

将输入的数字当作字符串来储存,用strlen( ) 函数得到字符串长度,即为数字位数

将字符串从左到右遍历输出(带空格)

最后还有一个回车不要忘了

再将字符串从右往左遍历输出(不带空格)就好了

注意事项:

题目说数字位数不超过5,所以定义字符数组长度应不小于6

因为字符串结尾还有结尾符 '\0' 占一位

参考代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

#include <stdio.h>

#include <string.h> //C语言字符串头文件,strlen() 函数包含在此内

int main()

{

char str[10]; //定义字符串长度为 10

scanf("%s", str); //输入数字 (作为字符串输入)

int len = strlen(str); //获取字符串长度

printf("%d\n", len); //输出字符串长度,即为数字位数

for (int i = 0; i < len; i++) //从左往右遍历输出

{

printf("%c ", str[i]);

}

printf("\n"); //输出回车

for (int i = len - 1; i >= 0; i--) //从右往左遍历输出

{

printf("%c", str[i]);

}

return 0;

}

下面是常规思路:

前面我们说过要进行三个循环,第一个循环要确定数字的位数

那么可以用一个 while 循环,将这个数字不断地除以 10

每除一次,位数加 1 ,知道数字变为 0 为止

第二个循环,就要用到 pow 计算幂函数了

对于一个数字

要得到它的个位数,就用它除以 10 的 0 次方 再对 10 取余

要得到它的十位数,就用它除以 10 的 1 次方 再对 10 取余

要得到它的百位数,就用它除以 10 的 2 次方 再对 10 取余

……

要得到它的第 i 位 (从右往左),就用它除以 10 的 i - 1 次方 再对 10 取余即可

那么我们可以对这里 10 的指数循环,从 n - 1 循环到 0

然后计算并输出数字即可,如下:

1

2

3

4

for (int i = n - 1; i >= 0; i--) {

temp = num / pow(10, i); //除以 10 的 i 次方

printf("%d ", temp % 10); //输出对 10 取余

}

第三个循环就简单多了,把第二个循环倒过来,从 0 循环到 n - 1 即可

参考代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

#include <stdio.h>

#include <math.h> //C语言数学头文件,pow() 函数包含在此内

int main() {

int num; //定义数字

scanf("%d", &num); //输入数字

int n = 0; //定义数字的位数

if (num == 0) n = 1; //如果数字是0,则位数为1

int temp = num; //定义 temp 来代替 num 进行计算

while (temp) { //将temp循环除以 10,到 0 为止

n++;

temp /= 10;

}

printf("%d\n", n); //输出数字位数

for (int i = n - 1; i >= 0; i--) { //第二循环,从左往右输出

temp = num / pow(10, i); //除以 10 的 i 次方

printf("%d ", temp % 10); //输出对 10 取余

}

printf("\n"); //输出回车

for (int i = 0; i < n; i++) { //第三循环,从右往左循环

temp = num / pow(10, i); //除以 10 的 i 次方

printf("%d", temp % 10); //输出对 10 取余

}

return 0;

}

题目中说第二行输出最后没有空格,之前没有注意到,但是因为判定没有那么严格也通过了

那要处理结尾空格的话,可以把数字和空格分开输出,加一个 if 语句判定是否到了结尾,要不要输出空格

如下:

1

2

3

4

5

6

//字符串方法

for (int i = 0; i < len; i++) //从左往右遍历输出

{

printf("%c", str[i]);

if (i != len - 1) printf(" "); // i == len - 1 时即为最后一个数字,不输出空格

}

1

2

3

4

5

6

//常规方法

for (int i = n - 1; i >= 0; i--) { //第二循环,从左往右输出

temp = num / pow(10, i); //除以 10 的 i 次方

printf("%d", temp % 10); //输出对 10 取余

if (i != 0) printf(" "); // i == 0 时即为最后一个数字,不输出空格

}

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

#include <math.h> //C语言数学头文件,pow() 函数包含在此内

int main() {

int num; //定义数字

scanf("%d", &num); //输入数字

int n = 0; //定义数字的位数

if (num == 0) n = 1; //如果数字是0,则位数为1

int temp = num; //定义 temp 来代替 num 进行计算

while (temp) { //将temp循环除以 10,到 0 为止

n++;

temp /= 10;

}

printf("%d\n", n); //输出数字位数

for (int i = n - 1; i >= 0; i--) { //第二循环,从左往右输出

temp = num / pow(10, i); //除以 10 的 i 次方

printf("%d ", temp % 10); //输出对 10 取余

}

printf("\n"); //输出回车

for (int i = 0; i < n; i++) { //第三循环,从右往左循环

temp = num / pow(10, i); //除以 10 的 i 次方

printf("%d", temp % 10); //输出对 10 取余

}

return 0;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值