poj 1220 NUMBER BASE CONVERSION
发布时间:2020-12-14 03:05:34 所属栏目:大数据 来源:网络整理
导读:NUMBER BASE CONVERSION Time Limit: ?1000MS ? Memory Limit: ?10000K Total Submissions: ?4270 ? Accepted: ?1920 Description Write a program to convert numbers in one base to numbers in a second base. There are 62 different digits:? { 0-9,A-Z
参考了大神的代码自己敲了一遍:=-= #include<iostream> #include<cstdio> #include<cstring> #include<string> using namespace std; char str[1000];//输入字符串 int start[1000],ans[1000],res[10000]; //被除数,商,余数 int oldbase,newbase; void change() {//各个数位还原为数字形式 int i,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'; } else if (str[i-1]>='a'&&str[i-1]<='z') start[i]=str[i-1]-'a'+36; else start[i]=str[i-1]-'A'+10; } } void solve() { memset(res,sizeof(res));//余数初始化为空 int y,i,j; //模n取余法,(总体规律是先余为低位,后余为高位) while(start[0] >= 1) {//只要被除数仍然大于等于1,那就继续“模newbase取余” y=0; i=1; ans[0]=start[0]; while(i <= start[0]) { y = y * oldbase + start[i]; ans[i++] = y/newbase; y %= newbase; } res[++res[0]] = y;//这一轮运算得到的余数 i = 1; //找到下一轮商的起始处 while((i<=ans[0]) && (ans[i]==0)) i++; //清除这一轮使用的被除数 memset(start,sizeof(start)); //本轮得到的商变为下一轮的被除数 for(j = i;j <= ans[0];j++) start[++start[0]] = ans[j]; memset(ans,sizeof(ans)); //清除这一轮的商,为下一轮运算做准备 } } void output() { printf("%d %sn%d ",oldbase,str,newbase); int i; for(i = res[0];i >= 1;--i) { if(res[i]>=0&&res[i]<=9) printf("%d",res[i]); else if(res[i]>=10&&res[i]<=35) printf("%c",'A'+res[i]-10); else printf("%c",'a'+res[i]-36); } printf("nn"); } int main() { int n; scanf("%d",&n); while (n--) { scanf("%d%d%s",&oldbase,&newbase,str); change(); solve(); output(); } return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |