条件控制循环--整数分段

任务描述

根据整数的长度来分段重新组合生成新数。输入多个偶数位数的整数m,将数平均分为两段:前半段为s,后半段为t,将前后半段交换,构成一个新的整数,并输出,不保留高位零。当输入数据为-1时结束。
输入:3025
输出:2530
输入:456089
输出:89456

相关知识

确定整数的位数
计算机如何确定一个整数的位数?
(1)要获得一个整数n的具体是几位数,可利用log10和floor函数:

m = floor(log10(n)+1)

(2) 利用循环,一位位地数数:从个位数开始,一位位地将数字去掉(n/10),去掉的同时进行计数。

cnt = 0;
while ( n != 0 )
    {
    cnt++;     //cnt最终的值即为位数
    n = n / 10;
}

本关任务中循环条件很明确:当输入的数不为-1时,循环进行,否则,程序结束;循环体的主要操作是整数分段,分段的位置与整数位数有关;同时,要使用条件变为不满足,要保证在循环体中能有改变此数的操作,即为输入语句。
pow()函数的误差
pow()函数的参数与返回值均为double类型,使用数值方法实现的求n次方,求解结果是有误差的。因此,在对pow()函数的返回值进行取整运算时,经常会加上一个非常小的小数,如1e-6,以保证取整结果不会比预计的值少1。
例如:

b = (int)(pow(x,y)+1e-6);

条件循环控制框架
while语句

scanf("%d",&n);
while (n != -1)
{
  ......
 scanf("%d",&n);
}

注意其中两个scanf()语句的位置和作用。*

测试说明

程序会对你编写的代码进行测试:
输入测试数据:

3025

需要你的程序输出:

2530

只要不输入-1,程序可以一直运行,连续输入数据,依次分段重新生成的新的数,输出数据的末尾有换行。
效果如下:
效果如上

代码如下

#include<stdio.h>
#include<math.h>
int main()
{
	int m,n,x,y,i,r;
	scanf("%d",&n);
	while(n!=-1)
	{
		m=floor(log10(n)+1);
		i=m/2;
		x=n/(pow(10,i));
		y=n-(x*(int)pow(10,i));
		r=y*pow(10,i)+x;
		printf("%d\n",r);
		scanf("%d",&n);
	}
	return 0;
}
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页