这道题同样是辗转相除法,与上一题不同的是此题要两次使用,第一次使用求出转化后各个数位上数字之和,最后在讲此和转化为对应进制进行输出,同时输出的时候必须注意可能输出字母的情况。
#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); } }