标签:
描述: |
一辆以固定速度行驶的汽车,司机在上午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