zoukankan      html  css  js  c++  java
  • 负进制转换

    一般我们求的较多的就是十进制转二进制,八进制,十六进制,这样的转换我们只需要不断的取余即可,然后输出

    附上代码:

    #include<iostream>
    using namespace std;
    int main()
    {
         char A[]={'A','B','C','D','E','F','G','H','I','J'};
         int N,R;//N代表要转换的数,R代表要转换成R进制; 
         cin>>N>>R;//R为正
         int B[1000];
         cout<<N<<"=";
         int x=0; 
         while(N!=0)
         {
             B[x]=N%R;
             N/=R;
             x++;
         }
         x--;
         for(int i=x;i>=0;i--)//倒叙输出 
         {
             if(B[i]>=10) cout<<A[B[i]-10];//超出10,用字母表示 
             else cout<<B[i];
              }
        cout<<"(base"<<R<<")";
        return 0;     
     } 

    然而出了将一个数转换为正进制数,我们还有将一个数转换为负进制数。遇到了负进制数,我们取余的时候余数会出现负的情况。 我们就要处理这个负数的情况。

    我们可以经过以下的变换:

    N/R=B.....X:     N是被除数,R是除数(R为负数),B是商,X是余数。

    B*R+X=N :

    B*R+X-R+R=N:

    (B+1)*R+X-R=N:

    经过这样的变换之后那么X-R就是正数了。那么我们也可以得到一个结论:当余数为负数时,余数=余数-除数(除数为负数),商=商+1。

    这样我们就可以求负进制了。

    代码:

    #include<iostream>
    using namespace std;
    int main()
    {
       char A[]={'A','B','C','D','E','F','G','H','I','J'};
       int N,R;
       cin>>N>>R;
       cout<<N<<"=";
       int B[1000];
       int x=0;
       while(N!=0)
       {
               B[x]=N%R;
               N/=R;
               if(B[x]<0)//核心代码:如果余数为负数,那么余数=余数+除数的绝对值,商加上1; 
               {
                   B[x]-=R;
                   N++;    
            }
               x++;
           }
           x--;
        for(int i=x;i>=0;i--)
        {
                if(B[i]>=10) cout<<A[B[i]-10];
                 else cout<<B[i];
        }
        cout<<"(base"<<R<<")"; 
        return 0;    
    }
  • 相关阅读:
    线段树入门总结
    从零基础学三分查找
    Codeforces Beta Round #1 A,B,C
    isupper()函数
    matlab字符串操作总结
    hdu 4873 ZCC Loves Intersection(大数+概率)
    设计模式入门之桥接模式Bridge
    有关UIWebView的SSL总结
    vmware虚拟机上linux操作系统进行tty1~tty6切换方法和具体步骤
    Python BeautifulSoup4 使用指南
  • 原文地址:https://www.cnblogs.com/zhoubo123/p/11400867.html
Copyright © 2011-2022 走看看