POJ 1220 大数任意进制转换
2011-05-04 15:31
375 查看
Writeaprogramtoconvertnumbersinonebasetonumbersinasecondbase.Thereare62differentdigits:
{0-9,A-Z,a-z}
HINT:Ifyoumakeasequenceofbaseconversionsusingtheoutputofoneconversionastheinputtothenext,whenyougetbacktotheoriginalbase,youshouldgettheoriginalnumber.
SampleInput
SampleOutput
[/code]
{0-9,A-Z,a-z}
HINT:Ifyoumakeasequenceofbaseconversionsusingtheoutputofoneconversionastheinputtothenext,whenyougetbacktotheoriginalbase,youshouldgettheoriginalnumber.
SampleInput
8 622abcdefghiz 10161234567890123456789012345678901234567890 16353A0C92075C0DBF3B8ACBC5F96CE3F0AD2 3523333YMHOUE8JPLT7OX6K9FYCQ8A 2349946B9AA02MI37E3D3MMJ4G7BL2F05 49611VbDkSIMJL3JjRgAdlUfcaWj 615dl9MDSWqwHjDnToKcsWE1S 51042104444441001414401221302402201233340311104212022133030
SampleOutput
62abcdefghiz 211011100000100010111110010010110011111001001100011010010001 101234567890123456789012345678901234567890 163A0C92075C0DBF3B8ACBC5F96CE3F0AD2 163A0C92075C0DBF3B8ACBC5F96CE3F0AD2 35333YMHOUE8JPLT7OX6K9FYCQ8A 35333YMHOUE8JPLT7OX6K9FYCQ8A 23946B9AA02MI37E3D3MMJ4G7BL2F05 23946B9AA02MI37E3D3MMJ4G7BL2F05 491VbDkSIMJL3JjRgAdlUfcaWj 491VbDkSIMJL3JjRgAdlUfcaWj 61dl9MDSWqwHjDnToKcsWE1S 61dl9MDSWqwHjDnToKcsWE1S 542104444441001414401221302402201233340311104212022133030 542104444441001414401221302402201233340311104212022133030 101234567890123456789012345678901234567890
题意就是说将M进制的大数转换成N进制。高精度不熟悉,参考洞庭散人的一篇文章浅谈大数的进制转换
感谢散人。
AC代码:
#include"stdio.h"
#include"string.h"
charstr[1000];
intstart[1000],ans[1000],res[10000];//被除数商余数
intbase1,base2;
voidchange()
{
inti,len=strlen(str);
start[0]=len;
for(i=1;i<=len;i++)
{
if(str[i-1]>='0'&&str[i-1]<='9')
start[i]=str[i-1]-'0';
elseif(str[i-1]>='a'&&str[i-1]<='z')
start[i]=str[i-1]-'a'+36;
else
start[i]=str[i-1]-'A'+10;
}
}
voidsolve()
{
memset(res,0,sizeof(res));
inty,i,j;
//先余低位,后余高位
while(start[0]>=1)//知道被除数等于0
{
y=0;i=1;
ans[0]=start[0];
while(i<=start[0])
{
y=y*base1+start[i];
ans[i++]=y/base2;
y%=base2;
}
res[++res[0]]=y;
i=1;
while((i<=ans[0])&&(ans[i]==0))i++;
memset(start,0,sizeof(start));
for(j=i;j<=ans[0];j++)
start[++start[0]]=ans[j];
memset(ans,0,sizeof(ans));
}
}
voidoutput()
{
printf("%d%s\n%d",base1,str,base2);
inti;
for(i=res[0];i>=1;i--)
{
if(res[i]>=0&&res[i]<=9)
printf("%d",res[i]);
elseif(res[i]>=10&&res[i]<=35)
printf("%c",'A'+res[i]-10);
elseprintf("%c",'a'+res[i]-36);
}
printf("\n\n");
}
intmain()
{
intn;
//freopen("a.in","r",stdin);
//freopen("out.txt","w",stdout);
scanf("%d",&n);
while(n--)
{
scanf("%d%d%s",&base1,&base2,str);
change();
solve();
output();
}
return0;
}
[/code]
相关文章推荐
- poj 1220 java大数处理进制转换
- POJ 1220 (两种任意进制之间的转换(大数),java的BigInteger)
- POJ 1220 任意进制转换
- POJ 1220 高精度进制转换
- 进制转换 poj1220-NUMBER BASE CONVERSION
- POJ 1220 NUMBER BASE CONVERSION(较复杂的进制转换)
- POJ 1220 大数字的进制转换,偷下懒,用java
- 进制转换小结(大数的任意进制转换)spoj429 Simple Numbers Conversion,poj 1220NUMBER BASE CONVERSION
- (高精度运算4.7.26)POJ 1220 NUMBER BASE CONVERSION(高精度数的任意进制的转换——方法:ba1----->10进制----->ba2)
- POJ 1220-NUMBER BASE CONVERSION 任意进制数转换
- (高精度运算4.7.26)POJ 1220 NUMBER BASE CONVERSION(高精度数的任意进制的转换——方法:ba1----->10进制----->ba2)
- poj 1220 进制转换
- POJ2305 Basic remains 大数|进制转换 Java
- POJ 1220 NUMBER BASE CONVERSION(高精度进制转换)
- 高精度进制转换 poj 1220 NUMBER BASE CONVERSION
- poj 1220 NUMBER BASE CONVERSION 高精度进制转换
- POJ 1220 NUMBER BASE CONVERSION(高精度--进制转换)
- 【Java练习2——进制转换】POJ 1220
- 任意长度的两个大数的乘法
- POJ 1001 Exponentiation (高精度/大数乘法)