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常量表达读取结束了。