数据结构题,需要完整的代码,可以正常运行的,做得好的,再悬赏30。拜托各位了 30
1个回答
展开全部
这是高精度加法,或者叫大整数加法,我用C++写了一个,楼主看看吧。输入两个数,调用一下而已。
#include<iostream>
#include<vector>
#include<string>
using namespace std;
void strToIntArray(const string &str,vector<int> &vec)
{//数字串转换为整型数组,最高位在右边,便于计算
size_t size = str.size();
if(vec.size() != size)
vec.resize(size);
for(vector<int>::size_type index = 0;index != vec.size();++index)
vec[index] = str[size - index - 1] - '0';
}
void toInteger(vector<int> & vec)
{//对整型数组进行进制和去掉前面的0等处理
size_t size = vec.size();
if(vec.back() >= 9)
{
vec.resize(size + 1);
++size;
}
for(vector<int>::size_type index = 0;index != size;++index)
{
if(vec[index] > 9)
{
vec[index + 1] += vec[index] / 10;
vec[index] %= 10;
}
}
while(size > 1 && vec[size - 1] == 0) --size;//去掉前面的0
vec.resize(size);
}
string intArrayToStr(vector<int> &vec)
{//将整型数组转换为数字串
string str;
for(vector<int>::size_type index = vec.size() - 1;index != 0;--index)
{
char ch = vec[index] + 48;
str.push_back(ch);
}
str.push_back((char)(vec[0] + 48));
return str;
}
string add(const string &s1,const string &s2)
{//高精度加法
size_t size1 = s1.size(),size2 = s2.size();
vector<int> v1,v2;
strToIntArray(s1,v1);strToIntArray(s2,v2);//转换为整型数组
if(size1 < size2)
{//若s2位数多
v1.resize(size2);
for(vector<int>::size_type i = size1;i != size2;++i)
v1[i] = 0;
}
else
{//若s1位数多
v2.resize(size1);
for(vector<int>::size_type i = size2;i != size1;++i)
v2[i] = 0;
}
for(vector<int>::size_type i = 0;i != v1.size();++i)
v1[i] = v1[i] + v2[i];//整型数组相加
toInteger(v1);//归整
return intArrayToStr(v1);//再次转换为数字串并返回
}
#include<iostream>
#include<vector>
#include<string>
using namespace std;
void strToIntArray(const string &str,vector<int> &vec)
{//数字串转换为整型数组,最高位在右边,便于计算
size_t size = str.size();
if(vec.size() != size)
vec.resize(size);
for(vector<int>::size_type index = 0;index != vec.size();++index)
vec[index] = str[size - index - 1] - '0';
}
void toInteger(vector<int> & vec)
{//对整型数组进行进制和去掉前面的0等处理
size_t size = vec.size();
if(vec.back() >= 9)
{
vec.resize(size + 1);
++size;
}
for(vector<int>::size_type index = 0;index != size;++index)
{
if(vec[index] > 9)
{
vec[index + 1] += vec[index] / 10;
vec[index] %= 10;
}
}
while(size > 1 && vec[size - 1] == 0) --size;//去掉前面的0
vec.resize(size);
}
string intArrayToStr(vector<int> &vec)
{//将整型数组转换为数字串
string str;
for(vector<int>::size_type index = vec.size() - 1;index != 0;--index)
{
char ch = vec[index] + 48;
str.push_back(ch);
}
str.push_back((char)(vec[0] + 48));
return str;
}
string add(const string &s1,const string &s2)
{//高精度加法
size_t size1 = s1.size(),size2 = s2.size();
vector<int> v1,v2;
strToIntArray(s1,v1);strToIntArray(s2,v2);//转换为整型数组
if(size1 < size2)
{//若s2位数多
v1.resize(size2);
for(vector<int>::size_type i = size1;i != size2;++i)
v1[i] = 0;
}
else
{//若s1位数多
v2.resize(size1);
for(vector<int>::size_type i = size2;i != size1;++i)
v2[i] = 0;
}
for(vector<int>::size_type i = 0;i != v1.size();++i)
v1[i] = v1[i] + v2[i];//整型数组相加
toInteger(v1);//归整
return intArrayToStr(v1);//再次转换为数字串并返回
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询