这是《C语言入门实战》系列的第11篇。
上一篇:C语言入门实战(10):取模问题
题目
对键盘输入的任意一组正整数(个数任意),求所有数的逆序数之和,这里的逆序数是指对该数从右向左顺序读得到的数,例如123的逆序数是321,1200的逆序数是21。输入非数字时结束程序。请编程解决该问题。
要求
输入输出格式示例1:
输入:170<回车>
x<回车>
输出:71
输入输出格式示例2:
输入:21<回车>
130<回车>
89<回车>
125<回车>
90<回车>
a<回车>
输出:671
参考代码
#include <stdio.h>
#include <stdlib.h>
// 定义一个函数,计算输入整数n的逆序数
int reverseNum(int n) {
int a = 0;
while(n>0) {
a = a*10 + n%10;
n /= 10;//即n=n/10
}
return a;
}
int main(int argc, char *argv[]) {
int result = 0;
int n;
char ch;
int flag = 1;
while(flag) {
n = 0;
ch = getchar();
while(ch!='\n' && ch!=EOF) {
if (ch>='0' && ch <='9') {
n = n*10 + ch-'0';
} else {
//读取到非正整数的字符,设置退出标记
flag = 0;
break;
}
ch = getchar();
}
//对应输入的组内合法的正整数值,得到其逆序数,累加进答案中
result += reverseNum(n);
}
printf("%d", result);
return 0;
}
代码复盘
我们定义了一个函数(函数用于封装可复用的代码单元),int reverseNum(int n)
,根据输入的整型值n
计算返回n
的逆序数。
&&
是逻辑and
符号,是“并且”的意思。
getchar()
在标准库头文件stdio.h
中声明,用于从标准输入(一般是键盘)读取一个字符。
EOF
是stdio.h
中定义的常量(常量值为-1
),表示读到了文件/标准输入末尾。因为正常来讲,从文件或标准输入读取一个字节,这个字节一定是>=0
的字符,所以可以规定-1
常量表达读取结束了。