美文网首页
WOJ-316-负权数

WOJ-316-负权数

作者: iDucky131 | 来源:发表于2020-01-18 21:21 被阅读0次

    参考了这篇文章洛谷 P1017 进制转换

    解题思路主要是:

    一个数例如11转化为2进制时是23+21+20,23和2^1都是可以被2整除的,只留下了最后一位不可以被2整除,那么此数取模2的数即为个位(当它可以整除2的时候就是0了嘛),现在我们再来看倒数第二位(倒数第一位刚才就这么出来了),把整个算式不可以整除2的部分减去,再除以2(就是相当于c++中的除以二向下取整,反正把最后一位舍掉了),在用刚才的方法模2又求出了倒数第二位!但是现在我们面临的是负数进制,其实只要细心观察就可以发现,每一位都是正整数,但是%一个负数之后有可能还是负数,所以我们就要让它加上一个进制位变成正数了,于是负数进制的情况也就这样出来了,但是别忘了还要减去这个最后一位(在正数进制的时候不要减去是因为除以的时候自动地向下取整了,但是负数就不一样了),于是就可以接着这样不断地运算下去。

    代码如下:

    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    int main() {
        char a[6]={'A','B','C','D','E','F'};
        int number,R;
        cin>>number>>R;
        while(number!=0||R!=0){
            if(number==0)
                cout<<0<<endl;
            else{
                int k;
                string result;
              while(number!=0){
                  k=number%R;
                  if(k<0) k+=abs(R);
                  number-=k;
                  number/=R;
                  if(k>9)  result=a[k-10]+result;
                  else result=to_string(k)+result;
              }
              cout<<result<<endl;
            }
            cin>>number>>R;
        }
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:WOJ-316-负权数

          本文链接:https://www.haomeiwen.com/subject/zjrlzctx.html