PTA | 程序设计类实验辅助教学平台 (pintia.cn)
可以利用拆位法也可以用辗转相处法:
要考虑 输入的A,B为0的情况(题目只说了输入的是非负数)
#include<vector>
#include <iostream>
#include<algorithm>
#include<string>
using namespace std;
typedef long long LL;
int m[1000];
void sovel(LL sum,int p)
{
int i=0;
if(sum==0)
{
cout<<0;
return;
}
while (sum != 0)
{ // 辗转相除法
m[i] = sum % p;
sum = sum / p;
i++;
}
while(i!=0)
{
i--; //一定要先--,不然会产生未定义行为
cout<<m[i];
}
}
int main()
{
int a,b,p;
cin>>a>>b>>p;
LL sum=a+b;
sovel(sum,p);
}
二刷
刚开始是这样写的:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int>v;
void sovel(int x,int D)
{
while(x)
{
v.push_back(x%D);
x/=D;
}
reverse(v.begin(),v.end());
for(auto ch:v)
{
cout<<ch;
}
}
int main()
{
int A,B,D;cin>>A>>B>>D;
long long sum=A+B;
sovel(sum,D);
return 0;
}
后来想想可能是有种情况是0的情况,那么这个时候就不会进入拆分了(不满足条件),我们要手动输出0: 于是就加了一句:
if(x==0)cout<<0;