17转化位二进制就是 10001;
任何数乘十七,其实就是这个数加上这个数左移四位
直接转换为高精度加法
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1010;
vector<int> a;
vector<int> b;
string n;
void add(vector<int> num1,vector<int> num2)
{
vector<int> c;
int d= 0; //记录是否进位
int sum = 0;//记录两数相加的值
for(int i = num1.size()-1; i >= 0; i --) //从后往前相加,加法都是从各位开始相加的
{
sum = a[i] + b[i] + d;
//两数相加大于等于2,进位
if(sum >= 2)
{
d = 1;
} else {
d = 0;
}
//存入当前位的值
c.push_back(sum-(d * 2));
}
//计算完a.size()位后要判断是否还有进位,有的话就加1
if(d != 0) c.push_back(d);
//去除前导0
while(c.size())
{
if(c.back() == 0) c.pop_back();
else break;
}
//从后往前输出
for(int i = c.size()-1; i >= 0; i --)
cout<<c[i];
}
int main()
{
cin >> n;
//给n先加上4个0,保证a和b的位数相同
for(int i = 0; i < 4; i ++)
{
a.push_back(0);
}
for(int i = 0; n[i]; i ++)
{
a.push_back(n[i] - '0');
}
for(int i = 4 ; i < a.size(); i ++)
{
b.push_back(a[i]);
}
//给n左移四位,就是给b末尾加上4个0
for(int i = 0; i < 4; i ++)
{
b.push_back(0);
}
add(b,a);
}