#include <stdio.h>
#include <string.h>
int main()
{
char map[55]="0123456789ABCDEfGHIJKLMNOPQRSTUVWXYZ";
char output[1000],input[1000]; //input存储输入的字符串,output是最终输出的数
int a[1000];
int m,n,i; //m表示原数的进制,n表示要转为的进制
printf("请输入原数的进制:");
scanf("%d",&m);
printf("请输入要转为的进制:");
scanf("%d",&n);
printf("请输入要转换的大数:");
scanf("%s",input);
int len=strlen(input);
if(len==1&&input[0]=='0')
printf("0\n");
for(i=0;i<len;i++){ //将大数在数组中存储起来
if(input[i]>='A'&&input[i]<='Z') a[i]=input[i]-'A'+10; //如果原数是含字母的八进制、十六进制什么玩意的
else a[i]=input[i]-'0';
}
int j=0;
int zuizhongyushu,zhongjianyushu=0;//zuizhongyushu最终余数,zhongjianyushu每一位余数
int flag=1;
while(1){
//flag作为循环是否进行的条件,当所有a[i]均为0时,循环停止
flag=0;
for(i=0;i<len;i++){
if(a[i]!=0){
flag=1;
break;
}
}
if(flag==0) break;
//这里从高位往低位除n进制,用point暂存每一次除法的余数,用作下一位,并更新a[i]
for(i=0;i<len;i++)
{
a[i]=a[i]+zhongjianyushu*m;
zhongjianyushu=a[i]%n;
a[i]=a[i]/n;
}
zuizhongyushu=zhongjianyushu; //取最后一位的余数
output[j++]=map[zuizhongyushu];
zhongjianyushu=0; //将进位余数归0,用于下一次计算
}
for(i=j-1;i>=0;i--) //用循环输出结果
{
printf("%c",output[i]);
}
printf("\n");
return 0;
}
附上流程图