1022 D进制的A+B

#include <iostream>
using namespace std;
int maxn=32;
int main() {
int z[maxn],num=0,a,b,d;
cin>>a>>b>>d;
int res=a+b;
do{
z[num++]=res%d;
res=res/d;
}while(res);
for (int i = num-1; i >=0 ; i--) {
cout<<z[i];
}
return 0;
}
问题 A: 又一版 A+B

#include <iostream>
using namespace std;
int main() {
long long int a,b,res;
int m,z[100],num;
while(cin>>m){
if(m==0) break;
cin>>a>>b;
num=0;
res=a+b;
do{
z[num++]=res%m;
res=res/m;
} while (res);
for (int i = num-1; i >= 0; i--) {
cout<<z[i];
}
cout<<endl;
}
return 0;
}
进制转换

- long long int大概是10的19次方左右,但是题目中给的是10的三十次方,超过了long long int的范围,所以要手动模拟除法。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int divideByTwo(string &num){
int carry=0;
for (int i = 0; i < num.length(); ++i) {
int digit=num[i]-'0';
int val=carry*10+digit;
num[i]=(val/2)+'0';
carry=val%2;
}
return carry;
}
bool isZero(const string &num){
for (char c:num) {
if(c!='0') return false;
}
return true;
}
int main(){
string num;
while(cin>>num){
if(num=="0"){
cout<<'0'<<endl;
continue;
}
string binary;
while(!isZero(num)){
int reminder= divideByTwo(num);
binary.push_back(reminder+'0');
int pos=num.find_first_not_of('0');
if(pos!= string::npos){
num=num.substr(pos);
}else num="0";
}
reverse(binary.begin(),binary.end());
cout<<binary<<endl;
}
return 0;
}
数制转换
- 注意输入可能有字母,进制大于十的情况,要用数组存储数据

#include <iostream>
#include<algorithm>
using namespace std;
long long int other_to_ten(string s,int p){
if(p==10) return stoll(s);
long long res=0;
for(char c:s){
int digit;
if(isdigit(c)){
digit=c-'0';
}else{
digit= toupper(c)-'A'+10;
}
res=res*p+digit;
}
return res;
}
string ten_to_other(long long n,int p){
if(p==10) return to_string(n);
if(n==0) return "0";
string res;
while(n>0){
int rem=n%p;
char c=(rem<10)?('0'+rem):('A'+rem-10);
res.push_back(c);
n=n/p;
}
reverse(res.begin(),res.end());
return res;
}
int main() {
int a,b;
string n;
while(cin>>a>>n>>b){
long long int res= other_to_ten(n,a);
string ans= ten_to_other(res,b);
cout<<ans<<endl;
}
return 0;
}
八进制

#include <iostream>
using namespace std;
int main() {
long int n;
while(cin>>n){
int z[100],num=0;
do{
z[num++]=n%8;
n=n/8;
}while(n!=0);
for (int i = num-1; i >= 0; --i) {
cout<<z[i];
}
cout<<endl;
}
return 0;
}