ccf--错误的里程表

ccf–错误的里程表

【问题描述】

三月八日,小明买了台新车。但很快小明发现汽车的里程表有问题:里程表上每一位都不显示数字3和数字8,也就是说直接从数字2跳到数字4,直接从数字7跳到数字9。小明纳闷:这车到底行驶里程是多少。

现在,小明向你求助:根据里程表显示的数字,给出真实的行驶里程。

【输入形式】

输入有多组测试数据。

输入第一行正整数T,表示有多少组测试数据。

后面有T行,每行一个非负整数,表示里程表显示数字,里面不含有数字3和8。该数字不超过10位。

40%的测试数据组数T 10≤T≤ 100;

30%的测试数据组数T 100≤T≤ 1000;

20%的测试数据组数T 1000≤T≤ 10000;

10%的测试数据组数T 10000≤T≤ 100000;

【输出形式】

对于每组测试数据,输出一个整数占一行:真实的行程里程。

【样例输入】

6
0
1
12
159
111224459
124567976
【样例输出】

0
1
10
103
19212007
21913077

实际为进制转化问题:八进制转十进制

进制转化代码如下:

int n;//八进制数n
for(int i=0;n>0;i++)
{
	int a=n%10;
	sum=sum+a*pow(8,i);//十进制数sum
	n=n/10;
}

如:
八进制24转十进制:20
24%10=4;
sum=0+48^0=4;
24/10=2;
sum=4+2
8^1=20

本题中里程表无法显示3、8,所以还需将其转化为0~8的八进制数

int a;
if(a>3&&a<8)
	a--;
if(a>8)
	a=a-2;

综上:

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    int k;
    cin>>k;
    for(int i=0;i<k;i++)
    {
        long long int n;//请一定注意题目给出的数据的范围!!!一开始没注意,提交上去数据全错呜呜呜
        cin>>n;
        long long int sum=0;
        for(int j=0;n>0;j++)
        {
            int a=n%10;
            if(a>3&&a<8)
                a--;
            if(a>8)
                a=a-2;
            sum=sum+a*pow(8,j);//十进制数sum
            n=n/10;
        }
        cout<<sum<<endl;
    }
    return 0;
}
  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值