题目如上↑
a>=0部分的替换挺简单,不多赘述,代码如下:
c=a%10;
switch(c)//c为上方a对10求整结果,即a的十位
{
case 0:
case 1:
case 2:
m=1;//十位为0,1,2则m=1
break;
case 3:
m=2;//十位为3则m=2
break;
case 4:
m=3;//十位为4则m=3
break;
case 5:
m=4;//十位为5则m=4
break;
default:
m=5;//十位为6及以上则m=5
break;
}
负数部分不用if难以区分出(由题可知若a为负数,则m恒为1)
我的思路(逆推)是(单就正负判断):
1.用switch区分正负;
2.将a对2取余(a%2)得出1和-1(需要a为奇数);
3.因此先判断a的奇偶性,若a为偶数则使其+1。
所以说判断a的正负的步骤如下:
1.判断a的奇偶性,若a为偶数则使其+1(变成奇数);
2.将a对2取余(a%2)得出1和-1;
3.通过用switch区分2.中得出的1和-1来判断a的正负。
代码实现:
switch(a%2)//判断a的奇偶性(用于对2取余后判断a的正负)
{
case 0:
a+=1;//若a为偶数则+1
break;
case 1:
break;//若a为奇数则不变
}
b=a%2;//经过上述处理,a一定为奇数,使其对2求余只有两种结果:1或-1
switch(b)
{
case -1://若a%2==-1则a为负数,直接赋值m=1
m=1;
break;
case 1://若a%2==1则a为正数,对a的范围进行进一步判断
break;
}
所有代码如下:
#include#include int main(void) { int a=0, b=0, c=0, m=0; scanf("%d",&a);//输入a c=a/10; switch(a%2)//判断a的奇偶性(用于对2取余后判断a的正负) { case 0: a+=1;//若a为偶数则+1 break; case 1: break;//若a为奇数则不变 } b=a%2;//经过上述处理,a一定为奇数,使其对2求余只有两种结果:1或-1 switch(b) { case -1://若a%2==-1则a为负数,直接赋值m=1 m=1; break; case 1://若a%2==1则a为正数,对a的范围进行进一步判断 switch(c)//c为上方a对10求整结果,即a的十位 { case 0: case 1: case 2: m=1;//十位为0,1,2则m=1 break; case 3: m=2;//十位为3则m=2 break; case 4: m=3;//十位为4则m=3 break; case 5: m=4;//十位为5则m=4 break; default: m=5;//十位为6及以上则m=5 break; } break; } printf("m=%dn",m); system("pause"); return 0; }



