读书人

标题1130: 数制转换

发布时间: 2013-03-21 10:08:17 作者: rapoo

题目1130: 数制转换

题目描述

求任意两个不同进制非负整数的转换(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)。


样例输入
4 123 10

样例输出
27

提示 [+]

*** 提示已隐藏,点击上方 [+] 可显示 ***


来源

2008年北京大学图形实验室计算机研究生机试真题


【思路】

标题1130: 数制转换

标题1130: 数制转换


/**********************************   日期:2013-2-19*   作者:SJF0115*   题号: 天勤OJ 题目1130: 数制转换*   来源:http://acmclub.com/problem.php?id=1130*   结果:AC*   来源:2008年北京大学图形实验室计算机研究生机试真题*   总结:**********************************/#include <string.h>#include <stdio.h>char str[1001];char ans[1001];/** 转换为十进制*  str是a进制数字*/long long int ToD(int a){    int c,len,i;    long long int sum,w;    len = strlen(str);    //转换为十进制的数字    sum = 0;    //权值    w = 1;    //从低位到高位遍历每一个数字     for(i = len-1;i >= 0;i--){         //0 - 9        if(str[i] >= '0' && str[i] <= '9'){            c = str[i] - '0';        }//A - F        else if(str[i] >= 'A' && str[i] <= 'F'){            c = str[i] - 'A' + 10;        }//a - f        else{            c = str[i] - 'a' + 10;        }//累加该位数字和该位数字的权值的积        sum  +=  c * w;//进制权值        w *= a;     }    return sum;}/** 十进制数字num转换为b进制数字,并用ans存储*/int ToAny(long long int num,int b){    int index = 0,c;    do{        //计算该位数字        c = num % b;        //将数字转换为字符        ans[index++] = (c < 10) ? (c + '0') : (c - 10 + 'A') ;        num /= b;    }while(num);    return index;}int main(){long long int c;    int len,a,b,i;while(scanf("%d %s %d",&a,str,&b) != EOF){//转换为十进制        c = ToD(a);//转换为b进制        len = ToAny(c,b);//输出        for(i = len-1;i >= 0;i--){            printf("%c",ans[i]);        }        printf("\n");}    return 0;}


读书人网 >编程

热点推荐