解题思路:先从预估的最大位数进行匹配,匹配成功得到实际位数后,进行“取商(最高位)输出-取余再进行下一次的取商(下一个最高位)输出”循环。而求数字逆序则需要将 “实际最大除数div_max/当前最高位除数div 得到 逆序后该数字所在的位数”,举个例子,实际为4位的数字2345,则实际最大除数为div_max=1000,若此时最高位的除数div为1000,即取出的商为2,这个最高位的2应当逆序后在最低位的2,即2*(div_max/div)=2*(1000/1000)=2,就从千位数变成个位数了。
注意事项:细心即可,多多调试,看似比较繁琐,实则比较简单,主体仅仅是一次for循环和里面的几条if-else语句!而且具有通用性,修改n值即可判断处理任意位数的整数!
参考代码:
/*作业1009 数字的处理与判断*/
/*不采用数组等方法*/
#include <stdio.h>
int main()
{
int num; //输入整数
int i,j; //循环变量
int x; //商(本次循环输出)和余(下一次循环被除数)
int y; //数字逆序
int n = 5; // 预估最大位数
int div = 1; //除数
int div_max = 0; //实际匹配成功后的最大位数的除数
int flag = 0; // 匹配成功标志位
int sum = 0; //数字逆序和
scanf("%d",&num);
x = num; //初始值(不超过n位的整数)num
for(i=1;i<n;i++)
div *= 10; //最大初始除数div(10的n次方)
for(i=1;i<=n;i++)
{
x = x/div; //取商,即取最高位,也即循环取各位数字
//预估位数与实际位数匹配
if(x==0) //最高位为0,即预估位数与实际num的位数不匹配,需要重新匹配
{
n--; //降低预估位数
div /= 10; //除数降低10倍
i = 0; x = num; //回到循环初始状态
continue;
}
//预估位数=实际位数,匹配成功
if(flag==0)
{
printf("%d\n",n); //1、输出该数字的实际位数
div_max = div; //得到实际最大除数,便于求数字逆序
flag = 1; //置标志位为1,表匹配成功,正式循环输出数字
}
//2、循环输出各位数字
if(i<n)
printf("%d ",x);
else
printf("%d\n",x);
y = x*(div_max/div); //数字逆序
sum += y; //数字逆序和
//取余,最高位调整到下一位
x = num%div;
div /= 10;
}
printf("%d",sum);//3、输出数字逆序和
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复