题意:一个人有个破车,这个车的里程表有问题。每当遇到3和8的时候都会直接跳过去,不记录数据。例在2公里的位置,跑了1公里,显示器显示4。遇到十位百位千位的时候也跳一下。就是29公里的位置,跑了一公里,会直接跳到40公里而非30公里
这题相当于
一个计数器每次碰到数字3,8则直接跳过,当该计数器计数到n时,其实际计数为多少?
题意:关键是题意的理解和转化,事实上将数字3,8跳过相当于一个八进制计数器,只不过用0,1,2,4,5,6,7来代替一般九进制计数的0,1,2,3,4,5,6,7,8。只要将该八进制数转化为十进制即可。
(好吧,表示自己对于这题为什么可以从八进制转成10进制的原因还不能完全明白,只是照葫芦画瓢把这一题给A了,哪位大神分析的比较好的给我讲一下,或者评论一下,谢了)
贴下代码:
#include<iostream>
#include<cstring>
#include
using namespace std;
int main()
{
char
ode
[
10
];
//里程数
int
real;
//整数的里程数
int
a
[
10
];
int
len;
//数组长度
int
i;
int
sum;
//实际里程数
while(
cin
>>
ode
,
strcmp(
ode
,
"0"))
{
memset(
a
,
0
,
10);
sum
=
0;
real
=
0;
len
=
strlen(
ode);
for(
i
=
0;
i
< len;i++)
{
a[i]=ode[i]-'0';
}
for(i=0;i< len;i++)
cout<<ode[i];
for(i=0;i< len;i++)
{
if(a[i]>=8)a[i]=a[i]-1;
if(a[i]>=4)a[i]=a[i]-1;
}
for(i=len-1;i>=0;i--)
{
sum+= a[i]*pow(8.0,(double)(len-i-1));
}
cout<<": "<<sum<<endl;
}
}
#include<cstring>
#include
using namespace std;
int main()
{
}