题目链接: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 }
时间: 2024-10-25 00:39:27