zoukankan      html  css  js  c++  java
  • 进制转换_任意进制转换任意进制

    问题 A: 进制转换

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 67  解决: 28
    [提交][状态][讨论版]

    题目描述

    请你编一程序实现两种不同进制之间的数据转换。

    输入

    输入数据共有三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16),第二行是一个n进制数,若n>10则用大写字母A~F表示数码10~15,并且该n进制数对应的十进制的值不超过1000000000,第三行也是一个正整数,表示转换之后的数的进制m(2≤m≤16)。

    输出

    输出仅一行,包含一个正整数,表示转换之后的m进制数。

    样例输入

    16
    FF
    2
    

    样例输出

    11111111

    解题思路:思路是先将任意机制转换为十进制,然后将十进制再转换到任意进制,也就是以十进制为一个中间值。
      任意进制转换十进制的方法是:举例说明:比如八进制的762,就等于7*8^2+6*8^1+2*8^0。
      十进制转换任意进制是通过除m取余法,然后将余数倒过来就是所求进制的数。

      
    toTen()函数是将字符串格式的bit进制的数转换为十进制的,然后通过long int 返回结果。
      tentoN()是讲十进制 long int 转换为 m 进制的,然后用r[]数组存储,并输出结果。
    代码:
    #include <iostream>
    #include <cstdio>
    #include <cstring>
     
    using namespace std;
     
    long  toTen(char a[], int bit)
    {
        int length = strlen(a);
        int i, b=1,sum=0; //i要做数组a的下标,注意其起止范围
        for(i=length-1;i>=0;i-- )
        {
            if(a[i]>='A')
            {
                sum += (a[i]-'A'+10) *b;
                b *= bit;
            }
            else
            {
                sum += (a[i]-'0') *b;
                b *= bit;
            }
        }
        return sum;
    }
     
    void tentoN(long int tenn,int m){
        int r[500];
        int j=0;
        int shang=tenn;
        while(shang!=0){
            r[j++]=shang%m;
            shang=shang/m;
        }
        for(int i=j-1;i>=0;i--){
            if(r[i]>=10){
                printf("%c",r[i]-10+'A');
            }else{
                printf("%d",r[i]);
            }
        }
    }
     
    int main()
    {
        int n;
        char a[500];
        char renyi[500];
        int m;
        long int tenn;
        scanf("%d",&n);
        scanf("%s",a);
        scanf("%d",&m);
        tenn=toTen(a,n);
        tentoN(tenn,m);
        //printf("%s",renyi);
        return 0;
    }
     
    /**************************************************************
        Problem: 1816
        User: zz13
        Language: C++
        Result: 正确
        Time:0 ms
        Memory:1696 kb
    ****************************************************************/
     
  • 相关阅读:
    分享一款颜色神器ColorSchemer Studio
    只要你用atom修改后保存代码文件的时候,你在chrome上的页面就会自动刷新。
    十六进制颜色代码
    WordPress窗体化侧边栏
    QQ输入法中英文标点符号快速切换
    Android ListView的item背景色设置以及item点击无响应等相关问题
    Android内存优化(使用SparseArray和ArrayMap代替HashMap)
    [Fatal Error] :3:13: Open quote is expected for attribute "{1}" associated with an element type "id".
    java模式—装饰者模式
    Java模式—适配器模式
  • 原文地址:https://www.cnblogs.com/TWS-YIFEI/p/5752115.html
Copyright © 2011-2022 走看看