CloudLunar
主页
知识库
人文社科
自然科学
跨学科领域
热门分类
算法及题库
云璟月's
墨色集(设计)
指尖集(代码)
未央集(随笔)
流觞集(语录)
如花集(书影)
纸鸢集(小说)
登录
B站
微博
人人
开心
Twitter
Facebook
RSS订阅链接
留言板
关于我
在社交网站上关注我
B站
微博
人人
开心
Twitter
Facebook
RSS订阅
RSS订阅链接
留言板
关于我
查看CodeVS/3116的源代码
←
CodeVS/3116
因为以下原因,你没有权限编辑本页:
你刚才请求的操作只对属于该用户组的用户开放:
用户
您可以查看并复制此页面的源代码:
[[分类:贪心]] ==摘要== {{信息题|高精度练习之加法|http://www.codevs.cn/problem/3116/|1|100|输出格式|60|time=2014-10-11 21:26:36}} ==题意== 500位以内的加法。 ==题解== 一位一位加,加完进位,类似于小学列竖式的方法。优化一些的常常使用万进制加法。 可以建立对象,通过重载运算符来使得程序更美观。 <pre> 返回值类型 operator 符号 (参数a,参数b){...}; //栗子: largeInt operator +(largeInt lhs,largeInt rhs){...}; </pre> 然后可以于对象内部建立friend函数,以便访问私有函数。在对象内部建议用friend写法取代另一种operator的写法: <pre> class T { T operator +(T rhs){...} //不推荐的写法 friend T operator +(T lhs,T rhs){...} //推荐的写法 } </pre> 原因是如果涉及隐式类型转换,下面那一种可以正确处理而上面只能处理右值。 其它不多说了。 ==代码== {{折叠|3116.cpp代码已折叠 |<pre>#include<iostream> #include<iomanip> #include<algorithm> #include<vector> using namespace std; class largeInt { public: const int size() const { return u.size(); } largeInt() { u.clear(); u.push_back(0); } largeInt(const int &number) { u.clear(); u.push_back(number); carry(); } void scan() { u.clear(); string original; cin>>original; for(int i=original.size()-1,j=0,p=1;i>=0;--i) { j+=(original[i]-'0')*p; p*=10; if((!i) || p==10000) { u.push_back(j); j=0; p=1; } } } void print() const { cout<<setw(0)<<setfill('0')<<u[size()-1]; for(int i=size()-2;i>=0;--i) cout<<setw(4)<<setfill('0')<<u[i]; } friend const largeInt operator +(const largeInt &a,const largeInt &b) { largeInt r; r.u.resize(max(a.size(),b.size())); for(int i=0;i<r.size();++i) { if(i<a.size()) r.u[i]+=a.u[i]; if(i<b.size()) r.u[i]+=b.u[i]; } r.carry(); return r; } private: vector<int> u; void carry() { for(int i=0;i<size();++i) { if(u[i]>=10000) { if(i==size()-1) u.push_back(u[i]/10000); else u[i+1]+=u[i]/10000; u[i]%=10000; } } } }; int main() { largeInt a,b; a.scan(); b.scan(); (a+b).print(); } </pre> |code3116}}
该页面使用的模板:
模板:信息题
(
查看源代码
)
模板:折叠
(
查看源代码
)
返回
CodeVS/3116
。
著作权声明
[
编辑
]
除非另有说明,本
网站内容
采用
知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议
进行许可(中国大陆可以参照
知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议
,如有不同以前者为准)。
如果需要商业化使用,请另联系作者取得授权。
关于
[
编辑
]
联系
@云璟月Lunar
的新浪微博
本站RSS:
RSS链接