• 进制转换


    总体思路:当要求十进制x的k进制表示时,我们只需要不断重复地把x对k求余,再除以k,即可得到由低到高的各个位数上的数

                       当要求得由k进制表示得数字得十进制时,我们需要依次计算各个数位上的数字与该位权重的积(第n位的权重为k^(n-1)),

                       然后将它们依次累加即可得到该十进制值

    题目描述

        求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。     不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。

    输入描述:

        输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。
        数据可能存在包含前导零的情况。

    输出描述:

        可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,...,9,A,B,...,F)。
    示例1

    输入

    15 Aab3 7
    

    输出

    210306
     1 #include<stdio.h>
     2 #include<string.h>
     3 
     4 int main()
     5 {
     6     int a,b,c;
     7     char str[40],ans[40];
     8     int i;
     9     int temp,len,index;
    10     int x;
    11 
    12     while( scanf("%d%s%d",&a,str,&b)!=EOF)
    13     {
    14         len = strlen(str);
    15         temp = 0;  //表示十进制数,初始化为0
    16         index = 0;  //表示目标数组中的位置
    17         for( i=0; i<len; i++)
    18         {
    19             //注意这里是从后往前循环
    20             if( str[i]>='0' && str[i]<='9')
    21                 x = str[i] - '0';
    22             else if( str[i]>='a' && str[i]<='z')
    23                 x = str[i] - 'a' + 10;
    24             else if( str[i]>='A' && str[i]<='Z')
    25                 x = str[i] - 'A' + 10;
    26             temp = temp*a +x;
    27         }
    28         do
    29         {
    30             //即使转换数值为0也会执行一遍
    31             x = temp%b;
    32             if( x<10 )  ans[index++] = x + '0';
    33             else ans[index++] = x-10 + 'A';
    34             temp/=b;
    35         }
    36         while( temp);
    37         for( i=index-1; i>=0; i--)
    38         {
    39             //输出时顺序从高位到低位
    40             printf("%c",ans[i]);
    41         }
    42         printf("
    ");
    43     }
    44     return 0;
    45 }
    在这个国度中,必须不停地奔跑,才能使你保持在原地。如果想要寻求突破,就要以两倍现在速度奔跑!
  • 相关阅读:
    c/c++(c++和网络编程)日常积累(二)
    docker日常积累
    c/c++日常积累
    qt日常积累
    YUV相关积累
    02-asio学习
    01--c实现基础客户端和服务端与c++ boost.asio实现对比
    webrtc学习笔记积累
    linux-日常工作积累
    用Java链接SQL Server
  • 原文地址:https://www.cnblogs.com/yuxiaoba/p/8438408.html
Copyright © 2020-2023  润新知