十进制转任意进制
分析:十进制数 X 转 M 进制,方法是:从 X 开始循环除以 M ,记下余数,整数商作为新的 X 继续除以 M ,直到 X=0 为止。然后倒序取余数即可。
(10 进制转 2 进制)
(10 进制转 16 进制)
代码
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<ctime>
#include<cmath>
#include<algorithm>
#include<cctype>
#include<iomanip>
#include<queue>
#include<set>
using namespace std;
int getint()
{
int sum=0,f=1;
char ch;
for(ch=getchar();!isdigit(ch)&&ch!='-';ch=getchar());
if(ch=='-')
{
f=-1;
ch=getchar();
}
for(;isdigit(ch);ch=getchar())
sum=(sum<<3)+(sum<<1)+ch-48;
return sum*f;
}
int x,m,cnt;
int a[55];
int main()
{
freopen("10toM.in","r",stdin);
freopen("10toM.out","w",stdout);
x=getint(),m=getint();
while(x)
{
a[++cnt]=x%m;
x=x/m;
}
for(int i=cnt;i>=1;--i)
{
if(a[i]<10) printf("%d",a[i]);
else printf("%c",'A'+a[i]-10);//处理字母
}
return 0;
}
任意进制转十进制
分析:N进制转10进制的方法(以2进制转10进制为例):
代码
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<ctime>
#include<cmath>
#include<algorithm>
#include<cctype>
#include<iomanip>
#include<queue>
#include<set>
using namespace std;
int getint()
{
int sum=0,f=1;
char ch;
for(ch=getchar();!isdigit(ch)&&ch!='-';ch=getchar());
if(ch=='-')
{
f=-1;
ch=getchar();
}
for(;isdigit(ch);ch=getchar())
sum=(sum<<3)+(sum<<1)+ch-48;
return sum*f;
}
int m,ans,mi,len;
int a[55];
char x[55];
int main()
{
freopen("Mto10.in","r",stdin);
freopen("Mto10.out","w",stdout);
m=getint();
scanf("%s",x+1);
len=strlen(x+1);
for(int i=1;i<=len;++i)//读入稍微复杂一点,因为有字母,把它们处理成数
{
if(x[i]>='0'&&x[i]<='9') a[i]=x[i]-'0';
else a[i]=x[i]-'A'+10;
}
ans=a[len],mi=1;//0次方
for(int i=len-1;i>=1;--i)
{
mi=mi*m;
ans+=a[i]*mi;
}
cout<<ans;
return 0;
}
本篇完。