这道题同样是辗转相除法,与上一题不同的是此题要两次使用,第一次使用求出转化后各个数位上数字之和,最后在讲此和转化为对应进制进行输出,同时输出的时候必须注意可能输出字母的情况。
#include<bits/stdc++.h>
using namespace std;
int vis[100];
void Print(int d,int n);
void Help(int m,int n)
{
int a=m;
int sum=0;
int temp;
while(a)//第一次使用辗转相除法
{
temp=a%n;
a=a/n;
sum+=temp;
}
a=sum;//讲转化后各位之和赋给a
int d=0;
while(a)第二次使用并输出
{
temp=a%n;
a=a/n;
vis[d++]=temp;
}
Print(d,n);
}
void Print(int d,int n)//输出
{
if(n>10)如果进制大于10,则可能输出字母
{
for(int i=d-1;i>=0;i--)
{
if(vis[i]>=10)
{
char c='A'+vis[i]-10;
cout<<c;
}
else
{
cout<<vis[i];
}
}
cout<<endl;
}
else//否则直接逆序输出就行
{
for(int i=d-1;i>=0;i--)
{
cout<<vis[i];
}
cout<<endl;
}
}
int main()
{
int m,n;
while(cin>>m>>n)
{
Help(m,n);
}
}
京公网安备 11010502036488号