字符串的各类运算
字符串加法、乘法、除法 十进制->二进制;二进制->十进制;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是之前做过的题目,不然的话只为了实现这道题可以不用写的这么复杂。