目录
哎,这个不同于:
三十六以内的进制转换(加注释多多),小程序版
源代码&注释
有两种做法
递归版:
//三十六以内进制转换(递归版)
#include<cstdio>
#include<cstring>
using namespace std;
int n,m,mid=0,goal=0,tmp,len;
char str[100];
void fac(int x)
{
if(x==0) return; //如果第一位数也转换完了,就返回
fac(x/m); //没转换完就进入递归
if(x%m<=9) //判断这位数字是数字还是字母
printf("%d",x%m); //是数字就把数字除后进制数
else
printf("%c",x%m-10+'A'); //是字母还得转化一下(加十是因为A表示10,B表示11......)
}
void print()
{
memset(str,0,sizeof(str));
mid=0,goal=0; //循环就得把数组,变量先清空
printf("...............三十六以内进制转换(By STY)...............\n");
printf("退出请按 " Ctrl+Z " (在键盘上),并按回车,谢谢使用!\n");
printf("( 2 <= 所有进制数 <= 36 )\n");
printf("请输入:(一个进制 该进制下的数 要转换的进制)\n");
}
int main()
{
print();
while(~scanf("%d%s%d",&n,str,&m)) //这个程序可以循环
{
len=strlen(str); //计算str字符串的长度
for(int i=0;i<len;i++) //遍历整个数字
{
if(str[i]>='0'&&str[i]<='9') //如果是数字......
tmp=str[i]-'0';
else if(str[i]>='A'&&str[i]<='Z') //大写可以
tmp=str[i]-'A'+10;
else
tmp=str[i]-'a'+10; //小写也可以
mid=mid*n+tmp; //秦九昭算法
}
printf("结果:\n");
if(mid)
fac(mid); //如果输入不是'0',进入递归函数
else
printf("0\n"); //是'0'就输出0,(不然会出事,'0'要特判)
printf("\n\n");
print();
}
return 0;
}
迭代版:
//三十六以内进制转换(迭代版)
#include<cstdio>
#include<cstring>
using namespace std;
int len,shu,yu,n,m,j;
char shuru[1000],shuchu[1000],a[1000];
void zhuan()
{
for(j=0;shuru[j]!='\0';j++) //遍历整个数(字符串结束符'\0')
{
shu*=n; //将字符串转换为整型变量
if(shuru[j]>'9') //如果字符大于'9',那就是字母
shu+=shuru[j]-'A'+10;
else
shu+=shuru[j]-'0'; //不是就是数字
}
for(;shu!=0;j++) //转换整个数字
{
yu=shu%m;
if(yu>9)
shuchu[j]=yu+55;
else
shuchu[j]=yu+48;
shu/=m;
}
for(int ii=j-1;ii>=0;ii--) //把数组在转换为字符串(不然字母输出不了)
a[j-ii-1]=shuchu[ii];
a[j]='\0'; //字符串要加结束符,不然就是字符数组,用%s输出不了
printf("%s\n",a); //输出
}
void print()
{
memset(shuru,0,sizeof(shuru));
memset(shuchu,0,sizeof(shuchu));
shu=len=yu=0; //循环就得把数组,变量先清空
printf("...............三十六以内进制转换(By STY)...............\n");
printf("退出请按 Ctrl+Z (在键盘上),并按回车,谢谢使用!\n");
printf("( 2 <= 所有进制数 <= 36 )\n");
printf("请输入:(一个进制 该进制下的数 要转换的进制)\n");
}
int main()
{
print();
while(~scanf("%d%s%d",&n,shuru,&m))
{
len=strlen(shuru); //计算字符串长度
if(len==1&&shuru[0]=='0') //没有len==1,如果输入'010',还是输出'0'
printf("0\n"); //如果没有这一句,数字是'0',输出就什么都没有
else
zhuan(); //引用转换函数
print();
}
return 0;
}
希望大家喜欢这篇文章!!!
如有问题请留言,谢谢!!!