摘要:以前写的进制转换一般不会考虑大数问题,举个例子就是如果16进制的FFFFFFFFF就是16^9是一个非常大的数,这个时候就需要用数组来存。
题目:
将M进制的数X转换为N进制的数输出。
输入
输入的第一行包括两个整数:M和N(2<=M,N<=36)。
下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出。
输出
输出X的N进制表示的数。
样例输入
10 2
11
样例输出
1011
提示
注意输入时如有字母,则字母为大写,输出时如有字母,则字母为小写。
**解题思路:**这个题主要是模拟进制转换的过程写的,运行一遍代码就可以看懂
程序代码:
#include<stdio.h> #include<math.h> #include<string.h> char s1[1000],c[1000]; int a[1000],b[1000]; int main() { int i,j,k,m,n,x,t,s,sum,v,w; scanf("%d%d",&m,&n); scanf("%s",s1); t=strlen(s1); //先转换为十进制 memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); k=1; for(i=0;i<t;i++) { for(j=0;j<k;j++) a[j]=a[j]*m; if(s1[i]>='0'&&s1[i]<='9') a[0]=a[0]+s1[i]-'0'; else if(s1[i]>='A'&&s1[i]<='Z') a[0]=a[0]+s1[i]-'A'+10; v=0; for(j=0;j<k;j++) { a[j]=a[j]+v; if(a[j]>=10) { v=a[j]/10; a[j]=a[j]%10; } else v=0; } while(v) { a[k++]=v%10; v=v/10; } } j=0; //把十进制的数顺序掉一下 for(i=k-1;i>=0;i--) b[j++]=a[i]; /* for(i=0;i<j;i++) printf("%d",b[i]); printf("\n"); printf("%d\n",k);*/ //*************************************// sum=1;s=0; //十进制转换n进制 while(sum) { sum=0; for(i=0;i<k;i++) { v=b[i]/n; // printf("******%d\n",v); sum+=v; if(i==k-1) { t=b[i]%n; // printf("&&&&&&&%d\n",t); if(t<=9) c[s++]=t+'0'; else c[s++]=t-10+'a'; } else { b[i+1]=b[i+1]+b[i]%n*10; //printf("+++++%d %d\n",i,b[i+1]); } b[i]=v; } } for(i=s-1;i>=0;i--) printf("%c",c[i]); printf("\n"); return 0; }