字符串的各类运算

字符串加法、乘法、除法 十进制->二进制;二进制->十进制;m进制->n进制

如果数字很大的话,需要用字符串替代(但是如果只是int超过范围,还是可以考虑用long long)

代码

#include <iostream>
#include <vector>
using namespace std;

//字符串加法
string add(string s,int x){
    int jinwei=x;
    for(int i=s.size()-1;i>=0;i--){
        int tmp=s[i]-'0'+jinwei;
        s[i]=tmp%10+'0';
        jinwei=tmp/10;
    }
    if(jinwei){
        char a=jinwei+'0';
        s=a+s;
    }
    return s;
}

//m进制2n进制(简单)
string m2n(int m,int n,string x){
    //m->10
    long long ans=0;
    for(int i=0;i<x.size();i++){
        ans=m*ans+x[i]-'0';
    }
    //10->2
    string output;
    if(ans==0)return "0";
    while(ans!=0){
        char c=ans%n+'0';
        output=c+output;
        ans=ans/n;
    }
    return output;
}

string int2str(int x){
    vector<char>v;
    if(x==0)return "0";
    while(x!=0){
        v.push_back(x%10+'0');
        x/=10;
    }
    string str;
    for(int i=v.size()-1;i>=0;i--)
        str=str+v[i];
    return str;
}

int main(){
    int n,x,y;
    cin>>n>>x>>y;
    //while(scanf("%d%d%d",&n,&x,&y)!=EOF){
    string str_x=int2str(x);
    //cout<<str_x<<endl;
    string ans=add(str_x,y/2);//一个字符串
    ans=add(ans,y-y/2);
    //cout<<ans<<endl;
    string output=m2n(10,n,ans);
    cout<<output<<endl;
    return 0;
}

基本上就是把实现的功能堆起来就好了。m2n是之前做过的题目,不然的话只为了实现这道题可以不用写的这么复杂。