标签:
| 描述: |
一辆以固定速度行驶的汽车,司机在上午10点看到里程表(里程表有6位)上的读数 是一个对称数(即这个数从左向右读和从右向左读是完全一样的,例如95859公里)。 两小时后里程表上出现了一个新的对称数。问该车的速度(公里/小时)是多少?
接口说明 原型: int CalcSpeedOfCar(int iCurrentMileage, int * piCarSpeed); 输入参数: int pcCurrentMileage:当前里程数(为对称数) (pcCurrentMileage ≤ 999999)
输出参数: int * piCarSpeed:汽车速度
返回值: 0:汽车速度计算成功 1:汽车速度计算失败,在里程表的范围内找不到下一个对称数
|
| 知识点: |
工程环境请使用VS2005
|
| 题目来源: | 软件训练营 |
| 练习阶段: | 初级 |
题目很简单,注意几个关键点,奇数位还是偶数位;整数是否为全9,中间对称位置是否为9;还有这个对称数要求是个小于七位数的整数,要进行边界检测~
#include<iostream>
using namespace std;
/*
功能: 根据里程计算车速
原型:
int CalcSpeedOfCar(int iCurrentMileage, int * piCarSpeed);
输入参数:
int pcCurrentMileage:当前里程数(为对称数)(pcCurrentMileage ≤ 999999)
返回值:
汽车速度(公里/小时)
*/
int CalcSpeedOfCar(int iCurrentMileage, int * piCarSpeed)
{
/*在这里实现功能*/
char tmp[7],tmp2[8];
itoa(iCurrentMileage,tmp,10);
int i,slen=strlen(tmp);
if(slen>6) return 1;
if(slen%2)//奇数
{
if(tmp[slen/2]<'9')
{
tmp[slen/2]++;
*piCarSpeed=(atoi(tmp)-iCurrentMileage)/2;
return 0;
}
else//tmp[slen/2]=='9'
{
itoa(iCurrentMileage+1,tmp2,10);
if(strlen(tmp2)>slen)
{
if(slen>5) return 1;
*piCarSpeed=1;
return 0;
}
i=slen/2;
while(tmp[i]=='9')
{
tmp[i]='0';
i--;
}
tmp[i]++;
for(i=0;i<slen/2;i++)
tmp[slen-i-1]=tmp[i];
*piCarSpeed=(atoi(tmp)-iCurrentMileage)/2;
return 0;
}
}
else//偶数
{
itoa(iCurrentMileage+1,tmp2,10);
if(strlen(tmp2)>slen)
{
if(slen>5) return 1;
*piCarSpeed=1;
return 0;
}
i=slen/2-1;
while(tmp[i]=='9')
{
tmp[i]='0';
i--;
}
tmp[i]++;
for(i=0;i<slen/2;i++)
tmp[slen-1-i]=tmp[i];
*piCarSpeed=(atoi(tmp)-iCurrentMileage)/2;
return 0;
}
return 0;
}
int main()
{
int speed;
CalcSpeedOfCar(1991,&speed);
cout<<speed<<endl;
return 0;
}
标签:
原文地址:http://blog.csdn.net/wljwsj/article/details/45499243