HDU4278 Faulty Odometer(进制转化问题)

题目大意:里程表会错过0 1 2 3 4 5 6 7 8 9中的 3 和 8 两个数字 也就是 正常的里程表显示0 1 2 3 4 5 6 7 8 9

坏掉的里程表只会显示 0 1 2 4 5 6 7 9

其实可以看做:0 1 2 3 4 5 6 7  即坏掉的里程表显示的是8进制的数字,只需先将显示的数字换成8进制数,在把8进制数字换位10进制数字就是答案。

#include <iostream>
#include <map>
#include <sstream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <string>
using namespace std;
map<char ,char> mp;
string str;
long long ans;
long long trans(long long a){
    int y,b=0,i=0;
    while(a>=1){
      y=a%10;
      b+=y*pow(8.0,i);
      i++;
      a=a/10;
    }
    return b;
}
long long fuck(){
    string tps;
    int len=str.length();
    long long tmp,tp;
    for(int i=0;i<len;i++){
        tps.push_back(mp[str[i]]);
    }
    stringstream ss(tps);
    ss>>tmp;
    tp=trans(tmp);
    return tp;
}
int main(){
    mp['0']='0';
    mp['1']='1';
    mp['2']='2';
    mp['4']='3';
    mp['5']='4';
    mp['6']='5';
    mp['7']='6';
    mp['9']='7';
    while(cin>>str){
        if(str=="0") return 0;
        cout<<str<<": ";
        ans=fuck();
        cout<<ans<<endl;
    }
}
时间: 2024-10-03 23:04:38

HDU4278 Faulty Odometer(进制转化问题)的相关文章

HDU ACM 4278 Faulty Odometer 进制映射

分析:十进制映射到八进制后,如果跳过8到9,实际上只数了7次,如果跳过3到了4-7实际上只数了3-6次.对应关系如下. 0,1,2,3,4,5,6,7,8,9 0,1,2,-,3,4,5,6,-,7 #include<iostream> using namespace std; int main() { int a[10]={0,1,2,0,3,4,5,6,0,7},i; __int64 ans,k; char b[15]; while(gets(b) && b[0]!='0'

c语言进制转化

#include <stdio.h> // 进制转化 int main(void) { int i1 = 12; int i2 = 88; int i3 = 0x32C; printf("八进制输出i1 = %o\n", i1); // 14 printf("十六进制输出i2 = %x\n", i2); // 58 printf("十六进制输出i3 = %x\n", i3); // 32c printf("十进制输出i3 =

Java Integer 进制转化的实现(附源码),对模与补码的理解

1.toBinaryString方法的实现 1 public static String toBinaryString(int i) { 2 return toUnsignedString0(i, 1); 3 } 4 private static String toUnsignedString0(int val, int shift) { 5 // assert shift > 0 && shift <=5 : "Illegal shift value";

栈的应用之进制转化

顺序栈的代码: 不再赘述:点击打开链接 //栈的应用-----进制转化 #include"stack.h" int main() { Stack st; InitStack(&st); int select; int num1; //要转化的数 int num2; //转化之后各个位的数 int flag = 1; //控制循环结束 while(flag) { cout<<"****************进制转换*****************&quo

计算机基础知识_进制转化

进制转化 一.任何一个进制转化为10进制的方式 156的十进制可以看做1*10^2 + 5*10^1  +   6*10^0 首先我们看一下156 ,平方,次方等等都是根据后面有多少位决定的,如果用计算机计算,则正好是156 33是一个八进制可以看做3*8^1+3*8^0 次方  换算出来就是10进制 如果你本身是x进制,那么你的数字就看做  num * x^位数  比如我有一个16进制的数字,转为10进制 16进制在计算机中表示方法: 1 2 3 4 5 6 7 8 9 a b c d e f

python数据结构:进制转化探索

*********************************第一部分******************************************************************* *********************************************************************************************************************** # 输入excel的行号,输出对应列的序号(从0开

标识符,进制转化,原反补码等

标识符 Java对包.类.方法.参数.变量等要素命名时使用的字符序列. 规则:***** 1.由字母(含中.英.日.俄等).数字.下划线_和美元符号$组成. 2.不能以数字开头   int 123a=1; 3.区分大小写  int a=1和int A=1是不一样的. 4.长度无限制.(一般编程长度不超过15个字符) 5.不能是Java中的保留字和关键字    int class="1"    int ainta=1 保留字和关键字都有哪些?我们知道以后应该避开它们. 标识符命名习惯:*

实现10进制转化成其它进制

<?php/** * Created by PhpStorm. * User: lenovo * Date: 2016/4/1 * Time: 17:10 */ header('content-type:text/html;charset=utf-8'); // 获取被转化数字及转化进制 $num = isset($_POST['num'])?$_POST['num']:''; $connect = isset($_POST['connect'])?$_POST['connect']:''; /

Day 3 python入门拾遗篇:bytes和str转化;三元运算;进制转化

pre.ctl { font-family: "Liberation Mono", monospace } p { margin-bottom: 0.25cm; line-height: 120% } 1.bytes类型 Python3中一个很重要的特性就是对文本和二进制数据做了较为明显的划分. 文本:Unicode,由str类型表示. 二进制数据:bytes类型表示.电影文件.音频文件都由二进制文件存储. bytes类型和str类型相互转化: string------>byte