很久以前写的啦
记得写了好久好久一直卡在特例的数据上面
想起都心塞

那时候变量和数组的取名对我来说简直是个大难题啊
完全乱来 abcdef就一路排下来
自己看的时候都搞不懂分别代表什么
好在后来英语学的越来越好了
这也算是学c++的附带好处叭
而且格式也写得非常丑…
我翻出来的时候各种字符都挨在一起密密麻麻…
真是搞不懂那时候怎么想的
稍微补了下空格但其它地方就懒得改啦
见谅

不过我当时居然写了注释…
太神奇了
^^

其实只要自己手动模拟一下小学的竖式乘加减和除法
思考一下 下标关系 和 进位处理 就会发现还是很简单的啦
坑的地方我现在还依稀记得两个
一个是减法 被减数比减数小的情况要特判加负号
一个是前缀零的处理 但是要特判答案为0的情况

还有做除法的时候 被除数比除数小或者除数为0的时候可以直接输0 节约时间

不过我除法做的方法不太常规…虽然说我也不知道常规应该咋写^^

加法

#include<bits/stdc++.h>
#include<cstring>
using namespace std;char s1[300] , s2[300] ;
int c[300] , ans , t , a[300] , b[300] ;int main()
{memset(a , 0 , sizeof(a));memset(b , 0 , sizeof(b));memset(c , 0 , sizeof(c));gets(s1) ;gets(s2) ;int len1 = strlen(s1) , len2 = strlen(s2) , len3 = 1 ;for(int i = 1 ; i <= len1 ; ++ i ) a[i] = s1[len1 - i] - '0' ;for(int i = 1 ; i <= len2 ; ++ i ) b[i] = s2[len2 - i] - '0' ;while(len3 <= len1 || len3 <= len2){ans = a[len3] + b[len3] ;c[len3] = (ans + t) % 10 ;t = (ans + t) / 10 ;++ len3 ;}if(t != 0) c[len3] = t ;while(c[len3] == 0 && len3 > 1) -- len3 ; //删除前导0for(int i = len3 ; i >= 1 ; -- i )cout << c[i] ;return 0;
}

减法

#include<bits/stdc++.h>
using namespace std;char s1[300] , s2[300] , s3[300] ;
int c[300] , ans , t=0 , a[300] , b[300] ;int main()
{memset(a , 0 , sizeof(a)) ;memset(b , 0 , sizeof(b)) ;memset(c , 0 , sizeof(c)) ;gets(s1) ;gets(s2) ;  int len1 = strlen(s1) , len2 = strlen(s2) , len3 = 1 , len4 ;//if(len2>len1||(len2==len1)&&(strcmp(s1,s2)<0)) //strcpy(s3,s1),strcpy(s1,s2),strcpy(s2,s3),cout<<"-",len4=len1,len1=len2,len2=len4;        //这里是处理减数比被减数大的情况for(int i = 1 ; i <= len1 ; ++ i ) a[i] = s1[len1 - i] - '0' ; for(int i = 1 ; i <= len2 ; ++ i ) b[i] = s2[len2 - i] - '0' ;while(len3 <= len1 || len3 <= len2){ans = a[len3] - b[len3] - t ;//t是前一个数借的数t = 0 ;if(ans < 0) ans += 10 , t = 1 ;c[len3] = ans ;++ len3 ;       }while(c[len3] == 0 && len3 > 1) -- len3 ; //前导0for(int i = len3 ; i >= 1 ; -- i )cout << c[i];return 0;
}

乘法

#include<bits/stdc++.h>
#include<cstring>
using namespace std;char s1[500] , s2[500] ;
int c[500] , ans , t , a[500] , b[500] ;int main()
{memset(a , 0 , sizeof(a));memset(b , 0 , sizeof(b));memset(c , 0 , sizeof(c));gets(s1);gets(s2);int len1 = strlen(s1) , len2 = strlen(s2) ;for(int i = 1 ; i <= len1 ; ++ i ) a[i] = s1[len1 - i] - '0' ;for(int i = 1 ; i <= len2 ; ++ i ) b[i] = s2[len2 - i] - '0' ;for(int i = 1 ; i <= len1 ; ++ i ){t=0;for(int j = 1 ; j <= len2 ; ++ j ){c[i + j - 1] += a[i] * b[j] + t;t = c[i + j - 1] / 10;c[i + j - 1] %= 10;}c[ i+ len2] = t;        }int len3 = len1 + len2 ;while(c[len3] == 0 && len3 > 1) -- len3 ; for(int i = len3 ; i >= 1 ; -- i)cout << c[i] ;return 0;
}

除法(带余)

#include<bits/stdc++.h>
using namespace std;char s1[300] , s2[300] , s3[300];
int c[300] , ans , t=0 , a[300] , b[300] , f[300] , d , e , p;int main()
{memset(a , 0 , sizeof(a));memset(b , 0 , sizeof(b));memset(c , 0 , sizeof(c));gets(s1) ;gets(s2) ;  int len1 = strlen(s1) , len2 = strlen(s2) , len3 ;for(int i = 1 ; i <= len1 ; i++) a[i] = s1[len1 - i] - '0' ; for(int i = 1 ; i <= len2 ; i++) b[i] = s2[len2 - i] - '0' ;d = len1 ;if(len2 > len1 || (len1 == len2) && (strcmp(s1,s2) < 0) )//如果除数比被除数小直接输0;{cout << 0 ;return 0 ;}if(len1 == 1 && a[1] == 0)//如果被除数为0直接输0;{cout << 0 ;return 0 ;}while(d != 0){memset(f , 0 , sizeof(f)) ;while(a[d] == 0 && d > 0) -- d ;//d为当前被除部分的左端if(d < 1) break ;e = d - len2 + 1 ;p = 1 ;for(int j = 1 ; j <= len2 ; ++ j){//把当前被除的部分放到f数组里与除数比较大小f[j] = a[e+j-1] ;if(f[j] < b[j]) p = 0 ;else if(f[j] > b[j]) p = 1 ;//用p来讨论大小}if(p == 0) -- e ;//e为当前被除部分的右端if(e <= 0) break ;//在商加1之前讨论被除数有没有除完for(int j = 1 ; j <= len2 ; ++ j){int k = e + j - 1 ;a[k] -= b[j] ;if(a[k] < 0) a[k] += 10 , -- a[k+1] ;}//只减一次 剩下的部分参与下一次循环++ c[e] ;}++ d ;while(c[len1] == 0 && len1 > 0) -- len1 ; while(a[d] == 0 && d > 1) -- d ; for(int i = len1 ; i >= 1 ; -- i)cout << c[i] ;//for(int i=d;i>=1;i--)//  cout<<a[i];//这里还可以输出余数return 0;}

转载于:https://www.cnblogs.com/GC-hahaha/p/9457719.html

c++ 高精度 加减乘除 四则运算 代码实现相关推荐

  1. 每天一道LeetCode----位运算实现加减乘除四则运算

    Divide Two Integers 原题链接Divide Two Integers 意思是重新实现除法运算,这里不要复习一下用位运算实现加减乘除四则运算 C++学习笔记-–用位运算实现加减乘除以前 ...

  2. Qt之加减乘除四则运算-支持负数

    一.效果展示 如图1所示,是简单的四则运算测试效果,第一列为原始表达式,第二列为转换后的后缀表达式,冒号后为结果.表达式支持负数和空格,图中是使用了5组测试数据,测试结果可能不全,如大家发现算法有问题 ...

  3. python自定义加减乘除函数实现加减乘除_Python实现高精度加减乘除运算

    Python实现高精度加减乘除运算 Mkdir700 • 2019 年 12 月 12 日 Loading... 今天实验课,要求的这个作业 ## 完整代码 ## 目前完整写完了加法 ```pytho ...

  4. C语言之回调函数(非常重要)附带回调函数版本实现整型的加减乘除四则运算

    对于回调函数!想必大家的第一想法,想必就是函数吧!其实这个也是笔者的第一想法,毕竟之前没有见过回调函数,所以就不怎么知道细节!默认为直接调用函数,就是回调函数,但等学会了回调函数,其实就不是这样想了! ...

  5. java编程计算加减乘除_Java程序完成加减乘除四则运算

    一.项目名称:加减乘除四则运算 二.设计思路: 1.在对话框中输入两个数,并转化为int类型 2.进行加减乘除四则运算 3.输出结果 三.流程图 四.源代码 import javax.swing.JO ...

  6. 高精度模板(含加减乘除四则运算)

    高精度加高精度 1 void BigAddBig(char *a, char *b, char *c) 2 { 3 //a表示结果,b,c位加数 4 int a_int[1005] = { 0 }, ...

  7. python 四则运算加减乘除简单代码

    operator = input("请输入要进行的运算(+.-.*./):") num1 = float(input("请输入第一个数字:")) num2 = ...

  8. java分子分母的加减乘除_加减乘除四则运算

    个人项目实战-四则混合运算 coding.net源码地址 :https://git.dev.tencent.com/qyj814/fours.git 一.实验要求 基本任务: 使用JAVA编程语言,独 ...

  9. java四则运算代码_Java实现简单四则运算

    GitHub 项目地址 PSP PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 10 10 · Estima ...

最新文章

  1. Comparable和Comparator使用区别
  2. php中关于mysqli和mysql区别
  3. Hibernate的延迟加载
  4. python是c语言_python与c语言
  5. mysql 序列号生成器 (自定义函数)
  6. Spark On MaxCompute如何访问Phonix数据
  7. win10 看计算机配置要求,win10怎么看电脑配置
  8. ContextAttribute类
  9. max std value 宏_【转载】:【C++跨平台系列】解决STL的max()与numeric_limits::max()和VC6 min/max 宏冲突问题...
  10. 核心Element对象
  11. 算法学习之路|互评成绩计算
  12. 设置 eclipse 启动时使用的 JDK
  13. gentoo 修改键盘映射
  14. ubuntu android驱动,ubuntu中正确设置android手机驱动程序
  15. 计算机教育应用研究,技术教育在计算机科学与技术师范专业中的应用研究
  16. built a JNCIS LAB系列:Chapter 1 Communities v1.0
  17. 2021年全球与中国红外窗口行业市场规模及发展前景分析
  18. 键盘怎么锁定计算机,电脑键盘锁住了怎么解锁 详细方法介绍
  19. 滴滴出行数据应用平台建设实践
  20. 使用Java的PrinterJob实现调用打印机打印

热门文章

  1. 达人评测 麒麟9000、麒麟990e和苹果a15 哪个好
  2. #插件需求# ffmpeg下载mpd切片视频
  3. boost yield fock介绍
  4. linux怎么检查越界,C语言指针越界访问示例
  5. word 文档在左侧显示文档的目录结构的方法
  6. Flutter 手写板 签名
  7. bugku_托马斯.杰斐逊解题报告
  8. 【蓝桥杯 第八大奇迹】
  9. php中如何使用KindEditor编辑器
  10. 2023十大网络安全认证,有任何一个都薪资过万,你有几个了?