• 洛谷p1017 进制转换(2000noip提高组)


    洛谷P1017 进制转换

    题意分析

    给出一个数n,要求用负R进制显示。
    n∈[-32768,32767]。R ∈[-20,-2]
    考察的是负进制数的转换,需要理解短除法。

    看到这道题的时候,我是比较蒙圈的。随手拿短除法试了试,但是发现结果不对。最明显的原因,一个数对一个负数取模,结果可能是一个负数。
    联想一下在做进制转化的时候,实在不断地做【除】和【取余】的操作。取余直接是取的余数,在做除法的时候,其实是有一个向下取整的过程。如:
    我们对125做短除法,余数为1时,125/2=72.5。实际写的时候写的是72。也可以理解为,已经把余数拿出来,其实是124/2=72.
    刚才说在对负数取模后结果可能是一个负数,解决负数的方法,就是在取模结果减去进制数(进制是负数),这样就能变成正数。但是别忘了,数字本身要减1,类似于对正数进制的下取整操作。

    代码总览

    #include <bits/stdc++.h>
    #define nmax 10000
    using namespace std;
    char ans[30] = "0123456789ABCDEFGHIJKLM" ;
    int main()
    {
        int n,dig;
        while(scanf("%d %d",&n,&dig) != EOF){
            vector<char> v;
            int num = n;
            while(n != 0){
                int temp = n % dig;
                n /= dig;
                if(temp < 0){
                    temp -= dig;
                    n++;
                }
                v.push_back(ans[temp]);
            }
            printf("%d=",num);
            for(int i = v.size()-1;i>=0;--i){
                printf("%c",v[i]);
            }
            printf("(base%d)
    ",dig);
        }
        return 0;
    }
  • 相关阅读:
    MySQL临时表
    git开发常用命令
    PHP资源列表
    Golang学习--平滑重启
    Golang学习--TOML配置处理
    Golang学习--包管理工具glide
    Golang学习--开篇
    构建自己的PHP框架--构建模版引擎(3)
    构建自己的PHP框架--构建模版引擎(2)
    Laravel Session 遇到的坑
  • 原文地址:https://www.cnblogs.com/pengwill/p/7367062.html
Copyright © 2020-2023  润新知