• 以后优先还是用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;
}