码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 1220 高精度/进制转换

时间:2018-07-15 23:15:24      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:高精度   put   int   namespace   iostream   names   理解   printf   max   

n进制转m进制,虽然知道短除法但是还是不太理解,看了代码理解一些了:

记住这个就好了:

for(int k=0;l; ){
    for(int i=l ; i>=1 ; i--){
        num[i - 1] += num[i] % m * n;
        num [i] / =m;
        }
        num[k++]=num[0] % m;
        num[0] /= m;
        while( l > 0&& num[ l - 1]==0) l--;
}

AC代码如下:

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<map>
#include<iostream>
using namespace std;
const int maxn=1200;
map<char,int> no;
map<int,char> output;
int num[maxn],num1[maxn];
char s[maxn];
int main(){
	for(int i=‘0‘,j=0;i<=‘9‘;i++,j++)
		no[i]=j,output[j]=i;
	for(int i=‘A‘,j=10;i<=‘Z‘;i++,j++)
		no[i]=j,output[j]=i;
	for(int i=‘a‘,j=36;i<=‘z‘;i++,j++){
		no[i]=j,output[j]=i;
	}
	int n,m,k,t;
	cin>>t;
	while(t--){
		cin>>n>>m;
		scanf("%s",s);
		int l=strlen(s);
		for(int i=0;i<l;i++){
			num[l-i-1]=no[s[i]];
		}
		for(k=0;l;){
			for(int i=l;i>=1;i--){
				num[i-1]+=num[i]%m*n;
				num[i]/=m;
			}
			num1[k++]=num[0]%m;
			num[0]/=m;
			while(l>0&&num[l-1]==0)l--;
		}
		printf("%d ",n);
		printf("%s\n",s);
		printf("%d ",m);
		for(int i=k-1;i>=0;i--)
			printf("%c",output[num1[i]]);
		cout<<"\n"<<endl;
	}
	
} 

  

POJ 1220 高精度/进制转换

标签:高精度   put   int   namespace   iostream   names   理解   printf   max   

原文地址:https://www.cnblogs.com/pkgunboat/p/9315236.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!