返学费网 > 培训机构 > 福州博洋信息人才

0591-8741005

全国统一学习专线 8:30-21:00

//大数处理之进制转换
    //http://ac.jobdu.com/problem.php?cid=1040&pid=61
    #include<stdio.h>
    #include<string.h>
    #define MAXS 3000
    typedef struct E{
    int num[MAXS];//num[0]放个位,依次往右排。
    int quan;
    int lenth;
    }E;
    E spa;//这在main函数中,被置空。目的是为了置空其他大数的时候,可以直接令其=spa,省些事。
    int stack[MAXS];
    int count;
    E mul(int k,E x)//返回整数k与大数x的乘积
    {
    int l=x.lenth,i;
    for(i=0;i<=l;i++)x.num[i]*=k;
    for(i=0;i<=l;i++)
    {
    x.num[i+2]+=x.num[i]/100;
    x.num[i+1]+=x.num[i]/10%10;
    x.num[i]%=10;
    }
    for(x.lenth+=2;x.num[x.lenth]==0;x.lenth--);
    return x;
    }
    E add(E x,E y)//返回大数x与大数y的和。
    {
    int i;
    if(x.lenth<y.lenth){E temp=x;x=y;y=temp;}
    for(i=0;i<=y.lenth;i++)
    {
    x.num[i]+=y.num[i];
    }
    for(i=0;i<=x.lenth;i++)
    {
    x.num[i+1]+=x.num[i]/10;
    x.num[i]%=10;
    }
    for(x.lenth+=2;x.num[x.lenth]==0;x.lenth--);
    return x;
    }
    E changeten(E sorce)//函数作用:处理ak这个大数与n这个整形数的乘积。
    {
    E quan=spa,temp,ten=spa;
    int i;
    quan.num[0]=sorce.quan%10;
    if(sorce.quan>=10)
    {
    quan.num[1]=sorce.quan/10;
    quan.lenth=1;
    }
    ten.num[0]=sorce.num[0]%10;
    ten.num[1]=sorce.num[0]/10;
    ten.lenth=(ten.num[1]!=0);
    for(i=1;i<=sorce.lenth;i++)
    {
    temp=mul(sorce.num[i],quan);
    ten=add(ten,temp);
    quan=mul(sorce.quan,quan);
    }
    return ten;
    }
    void divv(E sorce,int k)
    {
    int i;
    count=0;
    while(sorce.lenth)
    {
    for(i=sorce.lenth;i;i--)
    {
    sorce.num[i-1]+=(sorce.num[i]%k)*10;//标记一下……回头试一下,是不是把这里的10改成sorce的权值,就可以直接不用转化成10进制再求了?
    sorce.num[i]/=k;
    }
    stack[count++]=sorce.num[0]%k;
    sorce.num[0]/=k;
    for(;sorce.num[sorce.lenth]==0&&sorce.lenth;sorce.lenth--);
    }
    while(sorce.num[0])
    {
    stack[count++]=sorce.num[0]%k;
    sorce.num[0]/=k;
    }
    }
    int main()
    {
    int i,j,l,b_quan;
    char ha[MAXS];
    for(i=spa.lenth=0;i<MAXS;i++)spa.num[i]=0;
    E a=spa,ten=spa;
    while(~scanf("%d",&a.quan))
    {
    scanf("%d",&b_quan);
    scanf("%s",ha);
    a.lenth=l=strlen(ha)-1;
    if(l==0&&ha[0]=='0'){printf("0\n");continue;}
    for(i=0,j=l;i<j;i++,j--){char tempc=ha[i];ha[i]=ha[j];ha[j]=tempc;}
    for(i=0;i<=l;i++)
    {
    if(ha[i]<='9'&&ha[i]>='0')a.num[i]=ha[i]-'0';
    else a.num[i]=ha[i]-'A'+10;
    }
    n(a);
    divv(ten,b_quan);
    for(i=count-1;i>=0;i--)
    {
    if(stack[i]<10)printf("%d",stack[i]);
    else printf("%c",stack[i]-10+'a');
    }
    printf("\n");
    }
    return 0;
    }

 

博洋教育今日就业明星:余志强就职福建博思软件股份担任java工程师
解密明星背后那些鲜为人知的故事:福建工程软件工程专业,本科学历。在博洋教育参加JAVA软件项目实训,该生学习态度端正,有比较好的学习心态,会主动请教老师同学。毕业后经过就业部老师的推荐,现在成功入职福建博思软件股份有限公司。
温馨提示:为不影响您的学业,来校区前请先电话咨询,方便我校安排相关的专业老师为您解答
  • 热门课程
  • 作者最新文章
  • 在线报名
申请试听课程

只要一个电话
我们免费为您回电

姓名不能为空
手机号格式错误