返學(xué)費(fèi)網(wǎng) > 培訓(xùn)機(jī)構(gòu) > 福州博洋信息人才
//大數(shù)處理之進(jìn)制轉(zhuǎn)換
//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]放個(gè)位,依次往右排。
int quan;
int lenth;
}E;
E spa;//這在main函數(shù)中,被置空。目的是為了置空其他大數(shù)的時(shí)候,可以直接令其=spa,省些事。
int stack[MAXS];
int count;
E mul(int k,E x)//返回整數(shù)k與大數(shù)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)//返回大數(shù)x與大數(shù)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)//函數(shù)作用:處理ak這個(gè)大數(shù)與n這個(gè)整形數(shù)的乘積。
{
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;//標(biāo)記一下……回頭試一下,是不是把這里的10改成sorce的權(quán)值,就可以直接不用轉(zhuǎn)化成10進(jìn)制再求了?
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;
}
7月3日,高友銀成功就職北京高信達(dá)通信擔(dān)任JAVA軟件工程師
java在未來發(fā)展的幾大趨勢(shì) 一 java資訊 福州學(xué)C
7月3日,JAVA培訓(xùn)班林勝立成功就職福州博思軟件擔(dān)任軟件工程師
只要一個(gè)電話
我們免費(fèi)為您回電