设计一个结构体bign来存贮高精度非负整数
来源:互联网 发布:乐知英语在哪里 编辑:程序博客网 时间:2024/04/30 15:00
const int maxn=3000;struct bign{int len,s[maxn];bign(){memset(s,0,sizeof(s));len=1;}};
上面的结构体中有一个函数,称为构造函数,它是c++中特有的,作用是进行初始化。事实上,当定义bign X时候,就会执行这个函数,把x.s清零,并赋值x.len=1;
需要注意的是在c++中,并不需要typedef就可以直接用结构体名来定义,而且提供自动初始化的功能
我们重新定义赋值运算符(下面的函数要写在bign结构体定义的内部)
bign operator=(const char *num){len=strlen(num);for(int i=0;i<len;i++){s[i]=num[len-i-1]-'0';}return *this;}
可以把字符串转化为逆序数组+长度的内部表示方式
为了让它支持x=1234这样更加常用的赋值方式,还需要再定义一种赋值运算(仍然定义在结构体内部)
bign operator=(int num){char s[maxn];sprintf(s,"%d",num);*this=s;return *this;}关于sprintf函数
sprintf 最常见的应用之一莫过于把整数打印到字符串中,所以,sprintf 在大多数场合可以替代
itoa。
如:
//把整数123 打印成一个字符串保存在s 中。
sprintf(s, "%d", 123); //产生"123"
可以指定宽度,不足的左边补空格:
sprintf(s, "%4d%4d", 123, 4567); //产生:" 1234567"
当然也可以左对齐:
sprintf(s, "%-4d%4d", 123, 4567); //产生:"123 4567"
也可以按照16 进制打印:
struct bign{int len,s[maxn];bign(){memset(s,0,sizeof(s));len=1;}bign operator=(const char *num){len=strlen(num);for(int i=0;i<len;i++){s[i]=num[len-i-1]-'0';}return *this;}bign(int num){*this=num;}bign(const char* num;)bign operator=(int num){char s[maxn];sprintf(s,"%d",num);*this=s;return *this;}string str()const{string res=""; for(int i=0;i<len;i++){res=(char)(s[i]+'0')+res;}if(res==""){res="0";}return res;} };
sprintf(s, "%8x", 4567); //小写16 进制,宽度占8 个位置,右对齐
sprintf(s, "%-8X", 4568); //大写16 进制,宽度占8 个位置,左对齐
注意可以用bign x;x=100;来声明一个x并给它赋值,却不能把它写成bign x=100;应为这个时候bign=100是初始化,而非普通的赋值操作,为了让代码支持初始化操作,需要加2个函数bign(int num){*this=num;}bign(const char* num;)刚刚它们只是简单调用刚才的赋值运算符
string str()const//const表明它x.str()不会改变x,{string res="";for(int i=0;i<len;i++){res=(char)(s[i]+'0')+res;}if(res==""){res="0";}return res;}istream& operator>>(istream &in,bign &x)
{
string s;
in>>s;
x=s,c_str();
return in;
}
{
ostream operator<<(ostream &out,const bign&x)
{
out<<x.str();
return out;
}
}
这样就可以用cout<<x的方式打印它
重新定义了>>和<<运算符,让输入输出直接支持我们的bign结构体,这2个函数要定义再结构体bign的外边,不要写在里面
0 0
- 设计一个结构体bign来存贮高精度非负整数
- 高精度运算类bign(非负整数)模板
- 高精度非负整数
- 非负的高精度整数类实现
- 高精度加法(适用非负整数)
- 大整数类BIGN的设计与实现 C++高精度模板
- 大整数类BIGN的设计与实现 C++高精度模板
- 大整数类BIGN的设计与实现 C++高精度模板
- 大整数类BIGN的设计与实现 C++高精度模板
- 将一个非负十进制整数转换成二进制数,用非递归算法和递归算法来实现
- 高精度bign
- 输入一个非负整数,判断奇数和偶数
- 分离非负整数--gyy
- 高精度加法(非负)模板
- 给定一个非负整数,你可以最多交换两个数字一次来获得最大值的数字。 返回您可以获得的最大值。
- 一个数组内的非负整数,能组合成的最大整数
- 高精度运算类bign
- 高精度模板 bign类
- POJ 3687 Labeling Balls(逆向拓扑)
- 使用awk对文档中特定字段的排序
- 牛人博客和主页---站得高,看得更远(企业大牛的博客)
- hdu 2639 Bone Collector II
- Linux常用系统变量:
- 设计一个结构体bign来存贮高精度非负整数
- 号称是世界上所有的Java程序员都会犯的错误
- 第13周项目5-完成类似字符串复制的功能
- windows开发环境下 Apache+PHP环境整合安装
- CodeBlocks安装方法(Nightly Build版) 和几款高亮皮肤
- HEVC代码追踪(七):xCompressCu
- CSS属性overflow,cellspacing ,cellpadding
- SQLite学习过程遇到的问题
- Android性能优化篇:从布局角度进行优化