大数加法

来源:互联网 发布:怪物猎人x桐花套数据 编辑:程序博客网 时间:2024/05/22 12:25

大数加法

要点:

  • 翻转数字串
  • 数字字符相加
  •  数字转换成字符
  • 带进位相加

#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,0,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],carry,'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;}


1 0
原创粉丝点击