- 以后优先还是用long long,毕竟方便很多
- 字符串运算实现时,字符串+字符串,注意先补成一样长的
- 虽然题目说输入会有限制,可是实际测试却没有,还是要将EOF写上
字符串运算
#include<iostream>
#include<string>
#include<stack>
using namespace std;
stack<int>ans;
string stradd(string s1,string s2){
string s;
while(s1.size()>s2.size())s2="0"+s2;//补齐长度
while(s1.size()<s2.size())s1="0"+s1;
int he=0;
for(int i=s1.size()-1;i>=0;i--){//从最低位开始
he=he+s1[i]+s2[i]-'0'-'0';
char c= he%10+'0';
s.insert(0,1,c);
he=he/10;
}
while(he!=0){//计算完仍有进位
char c=he%10+'0';
s.insert(0,1,c); //按位依次插入到最前面
he=he/10;
}
return s;
}
int getdiv(string &s,int x){//字符串除法
int k=0;
for(int i=0;i<s.size();i++){
int cur=s[i]-'0'+k*10;//被除数
s[i]=cur/x+'0';//商
k=cur%x;//余数
}
int pos=0;
while(s[pos]=='0')pos++;//删掉前面多余0
s=s.substr(pos);
return k;//返回余数
}
int main(){
int m;
string s1,s2;
while(scanf("%d",&m)!=EOF){//
if(m==0)break;
cin>>s1>>s2;
string s(stradd(s1,s2));
while(!s.empty()){
ans.push(getdiv(s,m));
}
while(!ans.empty()){//用栈输出
printf("%d",ans.top());
ans.pop();
}
printf("\n");
}
return 0;
}