C语言入门实战(11):输入一组正整数,求逆序数的和
题目
对键盘输入的任意一组正整数(个数任意),求所有数的逆序数之和,这里的逆序数是指对该数从右向左顺序读得到的数,例如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!=
&& 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常量表达读取结束了。
