典型的进制转换题,需要用到辗转相除。
辗转相除:一种用于十进制向其他进制转换的算法。原理:每次求余运算都能算出该十进制数转换成目标进制数的尚未确定的"最后一位"。
例子:如将38转化为4进制。2*4^2+4^1+2=38=212(4进制) 对其取4的余数(2*4^2+4^1都是
4的倍数)=2。得到倒数第一位。212(4进制)-2=210(4进制)。
此时令(38-2)%4=9=(212-2)/4(4进制)=21(4进制)=2*4^1+1。
#include <cstdio>
#include <queue>
#include <cstring>
#include <cmath>
#include <stack>
using namespace std;
stack <long long> s;
//const int maxn=1005;
int main(){
unsigned long long a,b,d,sum;
scanf("%d %d %d",&a,&b,&d);
sum=a+b;
do{
s.push(sum%d);
sum/=d;
} while(sum!=0);//注意a,b均为0的情况
for(int i=s.size();i>0;i--) {printf("%llu",s.top());s.pop();}
}