【九度】题目1080:大数进制转换

来源:互联网 发布:puppy linux xiazai 编辑:程序博客网 时间:2024/06/04 19:31

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:5547

解决:1394

题目描述:

将M进制的数X转换为N进制的数输出。

输入:

输入的第一行包括两个整数:M和N(2<=M,N<=36)。
下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出。

输出:

输出X的N进制表示的数。

样例输入:
16 10F
样例输出:
15
提示:

输入时字母部分为大写,输出时为小写,并且有大数据。

来源:

2008年清华大学计算机研究生机试真题



// 大数二进制转换.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <string.h>#define maxDigits 100struct bigInteger{int digit[maxDigits];int size;void init (){for(int i=0;i<maxDigits;i++) digit[i]=0;size=0;}void set( int x){init();do{ digit[size++]=x%10000; x/=10000;}while (x!=0);}void output(){for (int i = size-1; i >=0 ; i--){if(i!=size-1) printf("%04d",digit[i]);elseprintf("%d",digit[i]);}printf("\n");}bigInteger operator *(int x) const{ //高精度整数与普通整数相加bigInteger ret;ret.init();int carry =0;for(int i=0;i<size;i++){int tmp=x*digit[i]+carry;carry=tmp/10000;tmp%=10000;ret.digit[ret.size++]=tmp;}if(carry)ret.digit[ret.size++]=carry;return ret;}bigInteger operator+( const bigInteger &A) const{//两高精度整数相加bigInteger ret;ret.init();int carry=0;for(int i=0;i<A.size||i<size;i++){int tmp=A.digit[i]+digit[i]+carry;carry=tmp/10000;tmp%=10000;ret.digit[ret.size++]=tmp;}if(carry) ret.digit[ret.size++]=carry;return ret;}bigInteger operator /(int x) const{bigInteger ret;ret.init();int remainder=0;for (int i = size-1; i >=0 ; i--){int t=(remainder*10000+digit[i])/x;int r=(remainder*10000+digit[i])%x;ret.digit[i]=t;remainder=r;} ret.size=0; for(int i=0;i<maxDigits;i++){ if(digit[i]!=0) ret.size=i+1; } return ret;}int operator %(int x) const{int remainder=0;for (int i = size-1; i >=0 ; i--){int t=(remainder*10000+digit[i])/x;int r=(remainder*10000+digit[i])%x;remainder=r;}return remainder;}}a,b,c;char str1[10000],str2[10000];int _tmain(int argc, _TCHAR* argv[]){int n,m;while(scanf("%d%d",&m,&n)){scanf("%s",str1);int L=strlen(str1);a.set(0);b.set(1);for(int i=L-1;i>=0;i--){int t;if(str1[i]>='0'&&str1[i]<='9')t=str1[i]-'0';else t=str1[i]-'A'+10; a=a+b*t;b=b*m;}int size=0;do{int t=a%n;if(t>=10)str2[size++]=t-10+'a';else str2[size++]=t+'0';a=a/n;}while (a.digit[0]!=0||a.size!=1);for (int i = size-1; i >= 0; i--)printf("%c",str2[i]);printf("\n");}return 0;}


0 0
原创粉丝点击