作业比赛编号 : 100000579 - 《算法笔记》3.5小节——入门模拟->进制转换问题 B: 数制转换(题目来源codeup,侵删)
注意:输入的字符可能为大写,也可能为小写;
进制大于10时,应该应注意
sum=sum*a+(s[i]-‘a’+10);,为加10;
将10进制转换为b进制时,应该用do… while,具体原因,点击:链接
#include<stdio.h>
#include<string.h>
char s[70];
int main()
{
int a,b;
int i;
long long sum;
while(scanf("%d %s %d",&a,&s,&b)!=EOF)
{
int len=strlen(s); //strlen()得到的值W为字符串的长度
long long sum=0;
for(i=0;i<len;i++)
{
//主要代码内容
if(s[i]>='0'&&s[i]<='9')
sum=sum*a+(s[i]-'0');
else if(s[i]>='a'&&s[i]<='z'){
sum=sum*a+(s[i]-'a'+10);
}
else
{
sum=sum*a+(s[i]-'A'+10);
}
}
i=0;
//注意求二进制时用do...。。while
do{
int m=sum%b;
if(m>9)
s[i++]='A'+(m-10);
else s[i++]='0'+m;
sum/=b;
}while(sum>0);
for( i--;i>=0;i--)
printf("%c",s[i]);
printf("\n");
}
return 0;
}
/**************************************************************
Problem: 1942
User: **********
Language: C++
Result: 正确
Time:3 ms
Memory:1192 kb
****************************************************************/