大数系列——大数减法
来源:互联网 发布:伦敦帝国学院 知乎 编辑:程序博客网 时间:2024/06/06 02:49
会了加法,自然也要会减法,并不是把加号换成减号那么简单,还是要动一番脑筋的。
下面先写上我的代码:
#include<stdio.h>#include<algorithm>char num1[111], num2[111];bool compare(char a[], char b[]){int len1 = strlen(a);int len2 = strlen(b);int i, j;if(len1 > len2)return true;else if(len1 == len2){for(i = 0; i < len1; i++){if(a[i] > b[i])return true;else if(a[i] < b[i])return false;}return true;}elsereturn false;}void reverse(char a[]){int i;int len = strlen(a);int temp;for(i = 0; i < len/2; i++){temp = a[i];a[i] = a[len-1-i];a[len-1-i] = temp;}}void minus(char a[], char b[], char c[]){int len1 = strlen(a);int len2 = strlen(b);int i, j;int L = 0;reverse(a);reverse(b);for(i = len2; i < len1; i++)//这一步很关键,初始化b[i] = '0';for(i = 0; i < len1; i++){if(a[i] + L >= b[i]){c[i] = a[i] + L - b[i] + '0';L = 0;}else{c[i] = (10 - (b[i] - '0')) + a[i] + L;L = -1;}}reverse(c);}using namespace std;int main(){int i, j;while(scanf("%s%s",num1,num2) != EOF){int len1 = strlen(num1);int len2 = strlen(num2);if(compare(num1,num2)){//这里也可以改成strcmp函数对特定情况进行讨论minus(num1, num2, num2);i = 0;while(num2[i] == '0' && i < len1 - 1)//这一步是对应 "a - a = 0"这种情况i++;for( ; i < len1; i++)printf("%c",num2[i]);}else{printf("-");minus(num2, num1, num1);i = 0;while(num1[i] == '0')//这一步是对应"a - b = c < 0, 且 c输出时会有多余的0"的情况,如-001i++;for( ; i < len2; i++)printf("%c",num1[i]);}printf("\n");}return 0;}以上就是大数的减法。
0 0
- 大数系列——大数减法
- 大数运算(3)——大数减法
- 大数运算——加法,减法,乘法
- 大数运算——加法,减法,乘法
- 大数运算——加法,减法,乘法 .
- 大数运算——加法减法
- 大数运算——加法减法
- 大数减法
- 大数减法
- 大数减法
- 大数减法
- 大数减法
- 大数减法
- 大数减法
- 大数减法
- 大数减法
- 大数减法
- 大数减法
- IllegalThreadStateException异常
- 【《代码整洁之道》精读与演绎】之四 优秀代码的格式准则
- 压缩字符串的函数
- CoordinatorLayout解析
- 基于floodlight开发SDN应用实例
- 大数系列——大数减法
- Java基础-String类API简要概述以及面试题
- UVA 1630 Folding
- 如何使cpu占用率为50%,以及呈正弦曲线分布?
- ARM Linux 3.x的设备树(Device Tree)
- Wing IDE 如何设置 python版本
- 学习笔记6——如何在linux中编辑PATH变量
- 1009. Product of Polynomials (25)
- 马士兵老师经典J2SE中的经典语录