函数

6-36 提取偶数位上的数 (5分)
从低位开始取出变量s中偶数位上的数,依次构成一个新数并返回。说明:最低位为奇数位,高位仍在高位,低位仍在低位。 例如,当s中的数为:1211245时,新数为:214。

函数接口定义:

int fun (int s);

其中 s 是用户传入的参数。 s 为非负整数;函数须返回偶数位上的新数。

裁判测试程序样例:

#include <stdio.h>
int fun (int s);

int main()
{ int s, t;
while(scanf("%d", &s)!=EOF)
{
t=fun(s);
printf("%d\n", t);
}

return 0;
}
/* 请在这里填写答案 */

输入样例:

1211245

输出样例:

214

int fun (int  s)
{
	int a[100],i=0,n,y=0;
	while(s!=0){ //样例1211245
		a[i]=s%10;/*定义i=0的目的就是给a[0]装数*/   //mat:b=s%10,这样写都没往数组里装! 
		s=s/10;
	/*现在a[0]==5, 4, 2, 1 ,1, 2 ,a[n-1]==1   }
	//mat:自己理解为砸后,1,2,1,1,2,4,5倒序进入数组a[0]=5,4, 2, 1 ,1, 2 ,1
	     整体数的位次也会发生改变(即1是各位,十位是2,以此类推),
		但是实则没变(各位是5,十位4,百2,千1,万1,十万1,百万2,千万1)OK!
	反馈:1211245 中‘偶数位’即十位(4),千位(1),十万位(2)。
		  a[0]==5,
		  a[1]== 4(十),
		  a[2]== 2, 
		  a[3]== 1(千) ,
		  a[4]== 1, 
		  a[5]== 2(十万) ,
		   a[6]=1     (偶数位对应的角标正好是奇数) 
		*/ 
		i++;     /*作用1体现从a[0]开始往后按顺序装数 a[1],a[2]... 奇数,
	            作用2计数
                //mat:自己以为这是只起到计数作用, 所以用了别的字母去当计数器,程序就坏了
                以为第21行会自动往数组里装数且全部装完,但实质一次循环只能装一次。所以必须用i*/ 
	}
	n=i;
	for(i=n-1;i>=0;i--){ //for(i=n-1;i【>0】;i--)也对,因为没有用上个位。 
		if(i%2==1)//如果角标是奇数,就重新组数喽。 
		y=y*10+a[i];
	}
	return y;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>