http://icpc.ahu.edu.cn/OJ/Problem.aspx?id=611
题目描述
期末成绩出来了,又是58,59,无奈啊,yobobobo无法接受这个现实,于是暗下决定:从此之后,5,8,9这些数字将在我的字典里消失!现在yobobobo的世界里没有5,8,9,所以他世界里的数值和我们不一样,在他的世界里,4之后就到了6(我们当然是5),所以yobobobo的世界是这样的:
1,2,3,4,6,7,10,11,12,13,14,16,,17……..47,60……,现在给你一个yobobobo世界里的数值N,请输出他原来的数值(比如6,其实它本来是5)。
输入包括多组数据,以文件(EOF)结束。
每组测试数据一个整数N(0<=N<=10^9)(输入保证每位数值绝对不包含5,8,9中的任何一位)
每组数据输出一个整数,表示真实的N
Sample Input
0
6
221712
Sample Output
0
5
39062
方法与总结
- 此题就是个进制转换问题,yobobobo的世界没有5,8,9,意思也就是他用的是七进制进制,只不过是用十进制的6代表七进制的5,用十进制的7代表七进制的6,所以在进制转换是遇见6和7就应该减1后再继续运算。
- 转换进制时我又用了math.h中的pow函数,由于pow函数接受和返回的数值均为浮点型,在计算和比较时可能会带来误差,结果就WA了,平时在整数运算是尽量不要用pow函数,自己写一个
代码
#include<iostream>
using namespace std;
int pow7(int n)求7的n次方
{
int pk=1;
for(int i=1;i<=n;i++)
pk*=7;
return pk;
}
int main()
{
int n;
while(cin>>n)
{
int num,sum;
int k=0;
sum=0;
while(n>0)//进制转换
{
num=n%10;
if(num>5 && num<8)//6,7应该进行减1
num--;
sum+=num*pow7(k++);
n/=10;
}
cout<<sum<<endl;
}
return 0;
}