大数加法
来源:互联网 发布:怪物猎人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
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数据的关键技术
- 八大排序算法之直接插入排序
- php判断浏览器类型
- 【SICP练习】86 练习2.58
- 单字节与宽字节的互转
- 大数加法
- Java程序员从笨鸟到菜鸟之(三)面向对象之封装,继承,多态(下)
- 【SICP练习】87 练习2.59
- 大数据的四个成功案例(来自IT经理网)
- Sysdig - 内核层的container 监控工具
- 博客大神-iOS开发系列--通知与消息机制
- 在 SharePoint Server 2013 中管理 Excel Services
- 设计模式原理及应用场合(转)
- 致橡树