首页 > 代码库 > SHU 414 - 字符串进制转换

SHU 414 - 字符串进制转换

题目链接:http://acmoj.shu.edu.cn/problem/414/

网上拉了个进制转换模板过来,因为数组开的太小一直WA,难受……

 1 #include<cstdio>
 2 #include<cstring>
 3 #define MAXN 10000
 4 int t[MAXN],A[MAXN],n;
 5 char OldData[MAXN],NewData[MAXN];  //转换前、后的数据
 6 int olds,news;                     //转换前、后的进制
 7 void trans()//调用方式:输入olds、news、OldData,然后调用trans(),输出NewData
 8 {
 9     int i,len,k;
10     len=strlen(OldData);
11     for(i=len;i>=0;i--) t[len-1-i] = OldData[i] - (OldData[i]<=9 ? 48 : (OldData[i]<a ? 55 : 61));//将字符串转化成0~61 
12     for(k=0;len;)
13     {
14         for(i=len;i>=1;i--)
15         {
16             t[i-1]+=t[i]%news*olds;
17             t[i]/=news;
18         }
19         A[k++]=t[0]%news;
20         t[0]/=news;
21         while(len>0 && !t[len-1]) len--;
22     }
23     NewData[k]=\0;
24     for(i=0;i<k;i++) NewData[k-1-i] = A[i] + (A[i]<10 ? 0 : (A[i]<36 ? 55 : 61));
25 }
26 int main()
27 {
28     //freopen("input.txt","r",stdin);
29     //freopen("output.txt","w",stdout); 
30     olds=26;
31     while(scanf("%s",OldData)!=EOF)
32     {
33         scanf("%d",&news);
34         int len=strlen(OldData);
35         for(int i=0;i<len;i++)
36         {
37             if(OldData[i]>=a && OldData[i]<=j) OldData[i]=OldData[i]-a+0;
38             else OldData[i]=OldData[i]-k+A;
39         }
40         trans();
41         printf("%s\n",NewData);
42     }
43 }

 

SHU 414 - 字符串进制转换