高精度加减乘除模板
来源:互联网 发布:品茗标书制作软件 编辑:程序博客网 时间:2024/05/01 14:19
<pre name="code" class="cpp">#include<iostream>#include<string>using namespace std;//对位补0void alignZero(string& s1, string& s2){while(s1.length() < s2.length())s1 = '0' + s1;while(s2.length() < s1.length())s2 = '0' + s2;}//清除高位多余的0string clearZero(string s){while(s.length() > 0 && s[0] == '0')s.erase(0,1);return s;}//判断两个字符串的大小,返回S1>S2的布尔值bool bigger(string s1, string s2){if(s1.length() > s2.length() )return true;if(s1.length() == s2.length() && s1>=s2)return true;return false;}/***************加加加加加******************//*先对位补0,然后从低位开始,若和大于9,则向高位仅为,最后清除高位多余的0*/string addition(string s1, string s2){int i;string result;alignZero(s1,s2);s1 = '0' + s1; //考虑首位可能进位,在首位中增加一个0处理进位s2 = '0' + s2;for(i=s1.length()-1; i>=0; i--){s1[i] += s2[i] - '0';if(s1[i] > '9'){s1[i] -= 10;s1[i-1]++;}}result = clearZero(s1);return result;}/***************减减减减减******************//*对位补0,从低位开始减法,向高位借位,未处理减数大于被减数的情况*/string substration(string s1, string s2){int i; string result;alignZero(s1, s2);for(i=s1.length()-1; i>=0; i--){if(s1[i] < s2[i]){s1[i-1]--;s1[i] += 10;}s1[i] -= (s2[i] - '0');}result = clearZero(s1);return result;}/***************乘乘乘乘乘******************//*两数其中一个为0,返回0*//*从低位开始,多位数乘多位数化简为多位数乘一位数,又化简为加法,字符串加‘0’,然后对乘数每一位上的数字进行对应次数的加法*/string multiply(string s1, string s2){if(s1=="0" || s2=="0")return "0";int i; char c; string result="0";for(i=s2.length()-1; i>=0; i--){for(c='1'; c<=s2[i]; c++)result = addition(result, s1);s1 = s1 + '0';}result = clearZero(result);return result;}/***************除除除除除******************/string division(string s1, string s2){int i;string result="", s="";for(i=0; i<s1.length(); i++){s = s+s1[i];result = result + '0';while(bigger(s,s2)){/*从0-9试商,若相减后余数小于除数,试商结束*/result[result.length()-1]++;s= substration(s,s2);}}result = clearZero(result);return result;}int main(){string s1,s2;while(cin >> s1){cin >> s2;cout << "+" << addition(s1,s2)<< endl;cout << "-" << substration(s1,s2)<< endl;cout << "*" << multiply(s1,s2)<< endl;cout << "/" << division(s1,s2)<< endl;cout << endl;}return 0;}
0 0
- 高精度abcdefg加减乘除模板。
- 高精度加减乘除模板
- 大数高精度加减乘除模板
- 高精度模板【高精度加减乘除模带负数判定】
- 高精度加减乘除
- 高精度加减乘除
- 高精度加减乘除
- 高精度 <加减乘除>
- 高精度加减乘除
- 两非负整数的高精度加减乘除模C++模板
- 大数据/高精度加减乘除
- 【多题合集】高精度加减乘除
- 高精度 加减乘除 【精华】
- 大整数高精度加减乘除
- 高精度算法,加减乘除
- 模板----加减乘除
- 大数(高精度)加减乘除取模
- 高精度加减乘除类的实现
- Oracle 之 OVER (PARTITION BY ..) 及开窗函数
- CIDN 是什么 有什么用?
- linux修改软件源
- poj 1087 A Plug for UNIX 二分图最大匹配
- Oracle内存全面分析(8)-Oracle的内存管理KSM和KGH
- 高精度加减乘除模板
- Universal-Image-Loader(android图片缓存)
- jsp+ajax自动刷新局部页面
- 《路由器关于RIP实验与协议》
- 题目1040:Prime Number 题目1047:素数判定
- 负载均衡-haproxy安装配置
- opencv2显示一张图像及waitkey()函数解析
- 概率图模型(PGM)学习资料汇总
- 开始学习antlr4