栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++基础与深度解析--peoject2 长整数加法

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++基础与深度解析--peoject2 长整数加法

1、project2要求和运行示例
运行示例:

运行示例:

运行示例:

2、项目代码

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
int char_to_num(char ch){
    if(ch>='a') ch=ch-32;
    if(ch>='0'&&ch<='9')
        return ch-'0';
   if(ch>='A')
        return ch-'A'+10;
}
char num_to_char(int num){
    if(num>=0&&num<=9)
        return (char)('0'+num-0);
    if(num>=10&& num<=36)
        return (char)('A'+num-10);
}

struct IntPair {   //定义结构化数组,用于读取数据的时候返回两个vector
    std::vector v1,v2;
}typedef IntPair;
void check_vector(std::vector v,char c)//检查输入数据是否合法,否则会提示错误
{
    if(c>='a') c=c-32;
    int t=0;
    if(v[0]==45) //首位是否为符号位
       t=1;
    for(int i=0+t; i='a') v[i]=v[i]-32;
       if(v[i]<'0'||v[i]>'Z'||(v[i]>'9'&&v[i]<'A')||v[i]>=c)  //每一项是否合法
       {
           std::cout<<"error! long integer exists wrong character!"< display(std::vector &v)//vector显示
{
    if(v.size()==1&&v[0]=='0');
    else
        {
            while(v[0]==43||v[0]==48)//不显示数据前头的+和数字0
            {
                std::reverse(v.begin(), v.end());
                v.pop_back();
                std::reverse(v.begin(), v.end());
            }
            if(v[0]==45)
            {
                while(v[0]==45||v[0]==48) //不显示负数前边的数字0
                {
                    std::reverse(v.begin(), v.end());
                    v.pop_back();
                    std::reverse(v.begin(), v.end());
                }
                std::reverse(v.begin(), v.end());
                v.push_back('-');
                std::reverse(v.begin(), v.end());
            }
        }

   for(int i=0; i display2(std::vector &v)//vector显示
{
    if(v.size()==1&&v[0]=='0');
    else
    {
        while(v[0]==43||v[0]==48)//不显示数据前头的+和数字0
        {
            std::reverse(v.begin(), v.end());
            v.pop_back();
            std::reverse(v.begin(), v.end());
        }
        if(v[0]==45)
        {
            while(v[0]==45||v[0]==48) //不显示负数前边的数字0
            {
                std::reverse(v.begin(), v.end());
                v.pop_back();
                std::reverse(v.begin(), v.end());
            }
            std::reverse(v.begin(), v.end());
            v.push_back('-');
            std::reverse(v.begin(), v.end());
        }
    }
    return v;
}
IntPair readNum(std::string file)//返回文件的数据vector1,vector2
{
  IntPair ret;
  std::fstream infile;
  infile.open(file.data());
  assert(infile.is_open());
  std::vector v;
  std::string s;
  int line=1;
    while (getline(infile,s))
    {
        std::istringstream is(s); //将读出的一行转成数据流进行操作
        char d;
        while (!is.eof())
            {
                is >> d;
                v.push_back(d);
            }
            v.pop_back();
        if(line==1)
        {
            ret.v1=v;
            v.clear();
        }
        else if(line==2)
            ret.v2=v;
        ++line;
    }
    return ret;
}

std::vector Sum(std::vector v1,std::vector v2,char Myprom_inputfile)
{
    std::vector sum;
    if((v1[0]==v2[0]&&(v1[0]==45))||(v1[0]!=45&&v2[0]!=45))//两个数符号位相同或者没有符号位
    {
        int t=0;
        if(v1[0]==v2[0]&&(v1[0]==45))//两个数符号位相同
        {
            if(v1[0]==45) t=1;
            std::reverse(v1.begin(), v1.end());
            std::reverse(v2.begin(), v2.end());
            v1.pop_back();
            v2.pop_back();//移除符号位
            std::reverse(v1.begin(), v1.end());
            std::reverse(v2.begin(), v2.end());
        }
        if(v1.size()==v2.size());//判断v1,v2长度是否一致,不一致的话,将其填零补充到一致
        else
        {   std::reverse(v1.begin(), v1.end());
            std::reverse(v2.begin(), v2.end());
            int length = abs(v1.size()-v2.size());
            if(v1.size()>v2.size())//将不同的数字位数补齐
            {
               for(int j=0;j=char_to_num(Myprom_inputfile))
           {
               label = (char_to_num(v1[j])+char_to_num(v2[j])+label)/char_to_num(Myprom_inputfile);

               if(j==0) {sum.push_back(num_to_char(char_to_num(v1[j])+char_to_num(v2[j]) - label*char_to_num(Myprom_inputfile)));}
               else
                   sum.push_back(num_to_char(char_to_num(v1[j])+char_to_num(v2[j]) + label - label*char_to_num(Myprom_inputfile)));
           }
           else
           {
               sum.push_back(num_to_char(char_to_num(v1[j])+char_to_num(v2[j])+label));
               label = 0;
           }
           if((j==v1.size()-1)&&label>0) sum.push_back(num_to_char(label));
        };
        if(t) //负数补充负号
            sum.push_back('-');
       std::reverse(sum.begin(), sum.end());
    }
    //一正一负
    if(v1[0]==45||v2[0]==45)//第一个为正,第二个为负
    {
        int first = 0;
        int second = 0;
        if(v1[0]==45)
        {
            std::reverse(v1.begin(), v1.end());
            second = 1;//第二个数为正
            v1.pop_back();
            std::reverse(v1.begin(), v1.end());
        }
        if(v2[0]==45)
        {
            first = 1;//第一个数为正
            std::reverse(v2.begin(), v2.end());
            v2.pop_back();
            std::reverse(v2.begin(), v2.end());
        }
        if(v1.size()==v2.size())
        {
        }
        else
        {
            int length = abs(v1.size()-v2.size());
            if(v1.size()>v2.size())//将不同的数字位数补齐
            {
                std::reverse(v2.begin(), v2.end());
                for(int j=0;jv22)) ;;
        if(first&&(v11v22));
        if(second&&(v11v22))
        { sum.push_back('-');}
        std::reverse(sum.begin(), sum.end());
    }
    return sum;
}
void check_second_parameter(char c)
{
    if((c>='0'&&c<='9')||(c>='a'&&c<='z')||(c>='A'&&c<='Z'));//每一项是否合法
    else
    {
        std::cout << "error! wrong character!" << std::endl;
        std::exit(0);//每一项是否合法
    }
}

IntPair div(std::vector sum, char sourc,char objec){//大数除法,结果存储在shang中
    int object = char_to_num(objec);
    int source = char_to_num(sourc);
    int decimal_num = 0;
    IntPair re;
    for(int i = 0; i sum=Sum(ret.v1,ret.v2,inputfile);
    std::cout << "2个长数据sum为:" ;
    if(inputfile==outputfile)
    {
        sum = display(sum);
    }
    std:: vector result;
    std::cout<<"111"<
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/604065.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号