一、7进制相加
1、逆序遍历,相加进位;
2、类似归并
#include <iostream>
#include <sstream>
#include <vector>
using namespace std;
/*
输入
4153
042
输出
4225
输入
126
126
输出
255
*/
int main()
{
string s1, s2;
cin >> s1 >> s2;
string res;
//逆序遍历,相加进位
int i=s1.size()-1; //s1末位
int j=s2.size()-1; //s2末位
int go=0; //进位
while(i>=0 && j>=0)
{
//非法检查
if(s1[i]<'0' || s1[i]>'6' || s2[j]<'0' || s2[j]>'6')
{
cout << "NO";
return 0;
}
//
int sum = (s1[i]-'0') + (s2[j]-'0') + go;
if(sum > 6) //进位
{
res.push_back(sum%7+'0');
go = sum/7;
}
else
{
res.push_back(sum+'0');
go = 0;
}
i--;
j--;
}
//同时结束
if(i==-1 && j==-1)
{
if(go==1)
{
res.push_back('1');
}
}
//s1未完
while(i>=0)
{
//非法检查
if(s1[i]<'0' || s1[i]>'6')
{
cout << "NO";
return 0;
}
int sum = (s1[i]-'0') + go;
if(sum > 6) //进位
{
res.push_back(sum%7+'0');
go = sum/7;
}
else
{
res.push_back(sum+'0');
go = 0;
}
i--;
}
//s2未完
while(j>=0)
{
//非法检查
if(s2[j]<'0' || s2[j]>'6')
{
cout << "NO";
return 0;
}
int sum = (s2[j]-'0') + go;
if(sum > 6) //进位
{
res.push_back(sum%7+'0');
go = sum/7;
}
else
{
res.push_back(sum+'0');
go = 0;
}
j--;
}
string ans(res.rbegin(), res.rend());
cout << ans;
return 0;
}