zoukankan      html  css  js  c++  java
  • 【NOIP2000】进制转换

    本题在洛谷上的链接:https://www.luogu.org/problemnew/show/P1017


    进制转换大致可分为R进制转10进制和10进制转R进制。

    一、R进制转10进制:

      这个比较简单,可以直接套公式。

      就是将R进制数转化为若干形如a*R^(i-1)的式子之和(a为R进制数当前位上的数,i为当前位)。

      举个栗子,100(2进制)=1*2^2+0*2^1+0*2^0=4。

    二、10进制转R进制:

      1、R为正整数:

        只要N(要转换的10进制数)不为0,就对R取模,并更新为除以R的商,将所得余数逆序打印即可。

        举个栗子,4(10进制)转为100(2进制):

          4/2=2...0

          2/2=1...0

          1/2=0...1

          将余数逆序输出,可得100.

      2、R为负整数:

        处理方法等同于R为正整数的做法,但不同的是,由于对R取模的商一定在[0,|R|)之间,所以当余数为负数时,应进行相关处理。也就是让余数加上|R|,再将商加1。

    另外,10进制的小数转R进制,相对较容易,将小数部分乘R再取整,不断重复,顺序输出取整结果即可,然而现在并不会当R是负数的情况。

    曾经一度以为对一个负整数取模和对一个正整数取模效果是一样的,其实不然, 可能余数一样,但商并不相同。

    但就这道题而言,还需要注意N为0时,当然R规定不可以为0。

     1 #include <cstdio>
     2 #include <stack>
     3 
     4 using namespace std;
     5 
     6 stack<char> ans;
     7 
     8 int main() {
     9     int N, R, r;
    10     scanf("%d%d", &N, &R);
    11     printf("%d=", N);
    12     while (N) {
    13         r = N % R, N /= R;
    14         if (r < 0) r -= R, ++N;
    15         if (r <= 9) ans.push(r + '0');
    16         else ans.push(r - 10 + 'A');
    17     }
    18     while (!ans.empty()) {
    19         printf("%c", ans.top());
    20         ans.pop();
    21     }
    22     printf("(base%d)", R);
    23     return 0;
    24 }
    AC代码
  • 相关阅读:
    Web开发中的显示与隐藏
    Html中的表格
    go标准库的学习-encoding/json
    go-simplejson文档学习
    go标准库的学习-regexp
    go标准库的学习-net
    go标准库的学习-strconv-字符串转换
    go标准库的学习-strings-字符串操作
    go标准库的学习-net/rpc
    go标准库的学习-net/rpc/jsonrpc
  • 原文地址:https://www.cnblogs.com/Mr94Kevin/p/7428254.html
Copyright © 2011-2022 走看看