数制转换题解

Go CSP-S!  •  5年前


#include<cstdio>
#include<cstring>
#include<cctype>
#define len 1000000
using namespace std;

int a[5],n,p,ans[100];
char s[40];

void multi()
{
int i,j,k,last=0;
for(i=1;i<=a[0];i++)
{
a[i]=a[i]*n+last;
last=a[i]/len,a[i]%=len;
}
if(last>0)a[++a[0]]=last;
}

void add(int x)
{
int i,j,k,last;
a[1]+=x,last=a[1]/len,a[1]%=len;
for(i=2;i<=a[0] && last>0;i++)
a[i]+=last,last=a[i]/len,a[i]%=len;
if(last>0)a[++a[0]]=last;
}

void div()
{
int i,j,k,last=0;
for(i=a[0];i>=1;i--)
{
a[i]+=last*len;
last=a[i]%p,a[i]/=p;
}
while(a[0]>0 && a[a[0]]==0)a[0]--;
}

int main()
{
int i,j,k,length;
scanf("%s",s),length=strlen(s);
for(k=0;k<length && s[k]!='<';k++);
for(n=0,i=k+1;s[i]!='>';i++)n=n*10+s[i]-'0';
for(p=0,i+=1;i<length;i++)p=p*10+s[i]-'0';
for(a[0]=1,i=0;i<k;i++)multi(),add(s[i]-'0');
while(a[0])ans[++ans[0]]=a[1]%p,div();

for(i=0;s[i]!='>';i++)printf("%c",s[i]);
printf(">=");
for(i=ans[0];i>=1;i--)printf("%d",ans[i]);
printf("<%d>\n",p);
return 0;
}


评论:

请先登录,才能进行评论