大数求和问题(C++版本)
发布时间:2020-12-31 04:17:50 所属栏目:大数据 来源:网络整理
导读:大数求和其实是个纯模拟,我们小学2年级老师就我们通过列竖式求加法,从个位开始加,进位+1,唯一需要值得注意的是我们求出来的结果要为有效值,即00001=1,0000=0 #include iostream#include stringusing namespace std;string nAB(string A,string B);strin
大数求和其实是个纯模拟,我们小学2年级老师就我们通过列竖式求加法,从个位开始加,进位+1,唯一需要值得注意的是我们求出来的结果要为有效值,即00001=1,0000=0 #include <iostream> #include <string> using namespace std; string nAB(string A,string B); string vCout(string A); void vout(string A); int main() { string nA,nB,nC; while(cin>>nA>>nB) { nC=nAB(nA,nB); //求出A+B nC=vCout(nC); //对C进行减0处理 vout(nC); } return 0; } string nAB(string A,string B) { int nlen,i,nc,nsum; string s,c; int nlena=A.size(); int nlenb=B.size(); if(nlena>=nlenb) { nlen=nlena; c.resize(nlena-nlenb,'0');//给c分配lena-nlenb的内存大小,放0 B=c+B; //把B长度补齐 } else { nlen=nlenb; c.resize(nlenb-nlena,'0'); A=c+A; //把A长度补齐 } s.resize(nlen,'0'); nc=0; //nc表示进位符 for(i=nlen-1;i>=0;i--) { nsum=(A[i]-'0')+(B[i]-'0')+nc; s[i]=(char)(nsum%10+'0'); nc=nsum/10; } if(nc==1) { s='1'+s; } return s; } string vCout(string A) { int i; string s; for(i=0;i<A.size();i++) { if(A[i]!='0') { break; } } if(i==A.size()) { s='0'; } else { s=A.substr(i,A.size()-i); //获得从i开始长度为A.size()-i的字符串 } return s; } void vout(string A) { cout<<A<<endl; } (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |