大数加法
发布时间:2020-12-14 02:45:17 所属栏目:大数据 来源:网络整理
导读:大数加法 要点: 翻转数字串 数字字符相加 ?数字转换成字符 带进位相加 #include iostream#include stdarg.h#include stringusing namespace std;//不定长度参数加法int charAdd(char first,...){int sum=0;char i=first;va_list args;va_start(args,first);
大数加法 要点:
#include <iostream> #include <stdarg.h> #include <string> using namespace std; //不定长度参数加法 int charAdd(char first,...) { int sum=0; char i=first; va_list args; va_start(args,first); while(i!='a') { sum+=(i-'0'); i=va_arg(args,char); } va_end(args); return sum; } //字符串翻转 string reverse(string str) { for (int i=0;i<str.length()/2;++i) { swap(str[i],str[str.length()-1-i]); } return str; } //int型转换为字符型 char intToChar(int i) { return char(i+'0'); } //计算大数加法 string getResult(string strNum1,string strNum2) { //翻转两个数字串,从而方便计算 strNum1=reverse(strNum1); strNum2=reverse(strNum2); //计算两个字符串的长度 int str1Length=strNum1.length(); int str2Length=strNum2.length(); //确保第一个字符串的长度不小于第二个 if(str1Length<str2Length) { swap(strNum1,strNum2); } char carry='0'; //进位 char *result=new char[str1Length+2]; //声明大数加法结果 memset(result,str1Length+2); int i; for(i=0;i<str2Length;++i) // { int temp=charAdd(strNum1[i],strNum2[i],carry,'a'); carry=intToChar(temp/10); result[i]=intToChar(temp%10); } while (i<str1Length) { int temp=charAdd(strNum1[i],'a'); carry=intToChar(temp/10); result[i]=intToChar(temp%10); ++i; } //观察最后是否有进位 if (carry=='1') { result[i]='1'; } return result; } int main() { string str1; string str2; while (true) { cin>>str1>>str2; cout<<str1<<" + "<<str2<<" = "<<reverse(getResult(str1,str2))<<endl; } return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |