C++使用string的大数加法运算(1)

所属分类: 软件编程 / C 语言 阅读数: 123
收藏 0 赞 0 分享

本次项目目标:使用C++完成对于大数的加法运算,供大家参考,具体内容如下

项目要点

1.大数指的是远超long long int的数据

2.将大数用矩阵进行存储,并通过矩阵实现运算

3.本人采用字符串进行存储,应注意char的特点

比如:

char a=161;

cout<<(int)a;

此时会输出-95,而不是161,char类型首个比特位是作为正负号的

加法,此处只做自然数加法,因为存在负整数的话可以使用自然数减法来处理

运行截图及代码如下:

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
#define n 10
string dezero(string a)//用来去掉正数前面的0,也就是说可以输入000001类似这样的数字
{
 long int i;
 for(i=0;i<a.length();i++)
 {
 if(a.at(i)>48) break;
 }
 if(i==a.length()) return "0";
 a.erase(0,i);
 return a;
}
string add(string a,string b)//自然数加法
{
 a=dezero(a);
 b=dezero(b);
 string c;
 string d="0";
 long int kmin,kmax,i;
 reverse(a.begin(),a.end());
 reverse(b.begin(),b.end());
 if(a.length()>b.length()) {kmin=b.length();kmax=a.length();c=a;}
 else {kmin=a.length();kmax=b.length();c=b;}
 c.insert(c.length(),d);
 for(i=0;i<kmin;i++)
 {
 if(a.at(i)>=48&&a.at(i)<=57) a.at(i)-=48;
 if(a.at(i)>=97&&a.at(i)<=122) a.at(i)-=87;
 if(b.at(i)>=48&&b.at(i)<=57) b.at(i)-=48;
 if(b.at(i)>=97&&b.at(i)<=122) b.at(i)-=87;
 c.at(i)=a.at(i)+b.at(i);
 }
 for(i=kmin;i<kmax+1;i++)
 {
 if(c.at(i)>=48&&c.at(i)<=57) c.at(i)-=48;
 if(c.at(i)>=97&&c.at(i)<=122) c.at(i)-=87;
 }
 for(i=0;i<kmax;i++)
 {
 if(c.at(i)>=n) 
 {
 c.at(i+1)+=c.at(i)/n;
 c.at(i)=c.at(i)%n;
 }
 }
 if(c.at(kmax)==0) 
 {
 c.erase(kmax,kmax+1);
 }
 for(i=0;i<c.length();i++)
 {
 if(c.at(i)>=10) c.at(i)+=87;
 if(c.at(i)<10) c.at(i)+=48;
 }
 reverse(c.begin(),c.end());
 return c;
}
int main()
{
 string a,b;
 while(cin>>a>>b)
 {
 cout<<add(a,b);
 }
 return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

C++中四种对象生存期和作用域以及static的用法总结分析

以下是对C++中四种对象生存期和作用域以及static的用法进行了详细的介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

C++嵌套类与局部类详细解析

从作用域的角度看,嵌套类被隐藏在外围类之中,该类名只能在外围类中使用。如果在外围类之外的作用域使用该类名时,需要加名字限定
收藏 0 赞 0 分享

C++空类详解

以下是对C++中的空类进行了详细的介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

C++之友元:友元函数和友元类详解

友元是一种允许非类成员函数访问类的非公有成员的一种机制。可以把一个函数指定为类的友元,也可以把整个类指定为另一个类的友元
收藏 0 赞 0 分享

C++中返回指向函数的指针示例

int (*ff(int)) (int *,int);表示:ff(int)是一个函数,带有一个int型的形参,该函数返回int (*) (int *,int),它是一个指向函数的指针,所指向的函数返回int型并带有两个分别是Int*和int型的形参
收藏 0 赞 0 分享

C数据结构之单链表详细示例分析

以下是对C语言中的单链表进行了详细的分析介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

C数据结构之双链表详细示例分析

以下是对c语言中的双链表进行了详细的分析介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

浅析如何在c语言中调用Linux脚本

如何在c语言中调用Linux脚本呢?下面小编就为大家详细的介绍一下吧!需要的朋友可以过来参考下
收藏 0 赞 0 分享

深入解析unsigned int 和 int

以下是对unsigned int和int进行了详细的分析介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

浅谈C++中的string 类型占几个字节

本篇文章小编并不是为大家讲解string类型的用法,而是讲解我个人比较好奇的问题,就是string 类型占几个字节
收藏 0 赞 0 分享
查看更多