小白第一次写这么长的东西,好像有的地方还没有考虑负数的情况,哈哈哈
第一份小作品,纪念一下,嘻嘻 。

#include<iostream>
#include<string.h>
using namespace std;
int c[100005];//最后的结果数组;
void MaxAdd(string a,string b);//高精加
void MaxSubtract(string a,string b);//高精减
void MaxMultiplication(string a,string b);//高精乘
void MaxtoLowDivision(string a,int b);//高精除低精度
void MaxDivision(string a,string b);//高精度除法
void Subduction(int a[],int b[]);//计算a=a-b
int Compare(string a,string b); //对比
int DivisionCompare(int  a[],int  b[]);
int main(){string s1,s2;int t,k;cout<<"233333333,please select a item:"<<endl;cout<<"     $$$$$$$$$$$$$$$$$$$$$$$"<<endl;cout<<"1,高精度加法"<<endl ;cout<<"2.高精减"<<endl;cout<<"3.高精乘 "<<endl;cout<<"4.高精除低精度 "<<endl;cout<<"5.高精度除法."<<endl;cout<<"0. *********结束(内容被和谐了)"<<endl;cout<<"     $$$$$$$$$$$$$$$$$$$$$$$$"<<endl;while(cin>>k,k!=0){switch(k){   case 1:cout<<"Please enter Big number one   = ";cin>>s1;cout<<"Please enter Big number two   = ";cin>>s2;MaxAdd(s1,s2);break;case 2:cout<<"Please enter Big number one   = ";cin>>s1;cout<<"Please enter Big number two   = ";cin>>s2;MaxSubtract(s1,s2);break;case 3:cout<<"Please enter Big number one   = ";cin>>s1;cout<<"Please enter Big number two   = ";cin>>s2;MaxMultiplication(s1,s2);break;case 4:cout<<"Please enter Big number one   = ";cin>>s1;cout<<"Please enter Small number   = ";cin>>t;MaxtoLowDivision(s1,t);break;case 5:   cout<<"Please enter Big number one   = ";cin>>s1;cout<<"Please enter Big number two   = ";cin>>s2;MaxDivision(s1,s2);break;           }cout<<"AND WHICH ITEM YOU WANT TO DO ?   PLEASE CHOOSE A ITEM , IF YOU WANT TO EXIT , PLEASE ENTER A '0' ,THANK ! "<<endl;}            if(k==0)cout<<"***********************************(内容被和谐了)!" <<endl;return 0;
}int compare(string a,string b){if(a.length()>b.length()) return 0;//位数大返回零 if(a.length()<b.length()) return 1;//位数小返回一 if(a.length()==b.length()){//相等情况逐个比较 for(int i=0;i<=a.length();i++){if(a[i]>b[i]) return 0; //大的返回零 if(a[i]<b[i]) return 1;//小的返回一 }}return 0;//全部相等返回零
}int DivisionCompare(int  a[],int  b[]){if(a[0]>b[0]) return 1;//大于就返回1 if(a[0]<b[0]) return -1;if(a[0]==b[0]){for(int i=a[0];i>=1;i--){if(a[i]>b[i]) return 1;//大于就返回1 if(a[i]<b[i]) return -1;//小于就返回0 }}return 0;//相等就返回0
}void Subduction(int a[],int b[])//计算a=a-b
{int flag;flag=DivisionCompare(a,b);// 大于小于 小于就不用做了 if(flag==0)//相等{a[0]=0;//直接整除了 return;//直接终止 上面答案已经加过一次了 }if(flag==1)//大于{for(int i=1;i<=a[0];i++)//相当于做减法 {if(a[i]<b[i])//若不够向上借位{a[i+1]--;a[i]+=10;}a[i]-=b[i];}while(a[0]>0&&a[a[0]]==0)//删除前导0a[0]--;//说明被除数少了一位 把0去掉 return;//终止 }
}void MaxAdd(string a,string b){int cc[100005],kk[100005];//存储整形数组 int len;//长度 memset(cc,0,sizeof(cc));//清空 memset(kk,0,sizeof(kk));//清空 memset(c,0,sizeof(c));//清空 cc[0]=a.length();//读取位数(长度) kk[0]=b.length();//读取位数(长度) for(int i=1;i<=cc[0];i++)//逐个存入 转为整形 cc[i]=a[cc[0]-i]-'0';for(int i=1;i<=kk[0];i++)//逐个存入 转为整形 kk[i]=b[kk[0]-i]-'0';len=(cc[0]>=kk[0]?cc[0]:kk[0]);//读取最大位数 for(int i=1;i<=len;i++){//逐位计算 c[i]+=(cc[i]+kk[i]);//加 c[i+1]+=c[i]/10;//进位 c[i]%=10;//取余 }len++;//去零 while(c[len]==0&&len>1) len--;//去零 cout<<"The answer of addition = ";for(int i=len;i>=1;i--)//逐位输出 cout<<c[i];cout<<endl;
}void MaxSubtract(string a,string b){int cc[100005],kk[100005];//存储整形数组 int len;memset(cc,0,sizeof(cc));//清空 memset(kk,0,sizeof(kk));//清空 memset(c,0,sizeof(c));//清空 cc[0]=a.length();//读取位数(长度) kk[0]=b.length();//读取位数(长度) for(int i=1;i<=cc[0];i++)//逐个存入 转为整形 cc[i]=a[cc[0]-i]-'0';for(int i=1;i<=kk[0];i++)//逐个存入 转为整形 kk[i]=b[kk[0]-i]-'0';if(compare(a,b)==0){//此为a大于等于b的情况 for(int i=1;i<=cc[0];i++){//逐个相减 c[i]+=(cc[i]-kk[i]);if(c[i]<0){//补位 c[i+1]--;c[i]+=10;}}len=cc[0];    //取位数(长度) }else{//此为b大于a的情况 for(int i=1;i<=kk[0];i++){//逐个相减 c[i]+=(kk[i]-cc[i]); if(c[i]<0){//补位 c[i+1]--;c[i]+=10;}}len=kk[0];//取长度 }len++;//去零 操作 while(c[len]==0&&len>1) len--;// 去零 cout<<"The answer of subtraction = ";if(compare(a,b)!=0) cout<<"-";//先输出一个负号 for(int i=len;i>=1;i--)//逐个输出 cout<<c[i];cout<<endl;
} void MaxMultiplication(string a,string b){int cc[100005],kk[100005];//存储整形数组 int len;//长度 memset(cc,0,sizeof(cc));//清空 memset(kk,0,sizeof(kk));//清空 memset(c,0,sizeof(c));//清空 cc[0]=a.length();//读取位数(长度) kk[0]=b.length();//读取位数(长度) for(int i=1;i<=cc[0];i++)//逐个存入 转为整形 cc[i]=a[cc[0]-i]-'0';for(int i=1;i<=kk[0];i++)//逐个存入 转为整形 kk[i]=b[kk[0]-i]-'0';for(int i=1;i<=cc[0];i++){    //乘法  for(int j=1;j<=kk[0];j++){c[i+j-1]+=cc[i]*kk[j];c[i+j]+=c[i+j-1]/10;//进位 c[i+j-1]%=10; //取余 }   }len=cc[0]+kk[0]+1;//去零 while(c[len]==0&&len>1) len--;//去零 cout<<"The answer of multiplication = ";for(int i=len;i>=1;i--)cout<<c[i];cout<<endl;
} void MaxtoLowDivision(string a,int b){int cc[100005],len,k=0;//存储数组 memset(cc,0,sizeof(cc));memset(c,0,sizeof(c));cc[0]=a.length();//取最大位 for(int i=1;i<=cc[0];i++)cc[i]=a[i-1]-'0';//存储 for(int i=1;i<=cc[0];i++){c[i]=(k*10+cc[i])/b;//做除法,k是余数 模拟除法算法 相当于手算过程                               k=(k*10+cc[i])%b;//余数 }//例子 123456789 存入为 123456789 (从1到9) cc[0]=9  假设除10  则为 012345678 余 9   此时输出会输出0 len=1;//去零操作                                            len=1 c[len]==0 len++后可以输出为12345678  去掉首位的0 while(c[len]==0&&len<cc[0]) len++;//去零 cout<<"The answer of MaxtoLowDivision is = ";for(int i=len;i<=cc[0];i++)cout<<c[i];            //逐个输出 if(k!=0) cout<<"      The Remainder is ="<<k;   //输出余数 cout<<endl;
} void MaxDivision(string a,string b){/*这个比较难以理解 举个例子 3500 和 499那么在我们转换数组之后 变成了 0053和994  一个四位数除于一个三位数 最大的情况 答案只有两位 例子: 9999除于100等于99因此 我们定义c[0]为其最大位数  就是两者相减加一(防止两者位数相同的情况 比如 6处于2等于3) 由于除数是不能变的  因此我们把除数存入一个临时数组temp里面然后在被除数能被除的那一位进行除法  然后让被除数与temp数组做减法  答案做加法 并且去掉被除数前面的零 同时计算被除数的位数 就是一个模拟除法计算的过程 我们只会加法和减法 ,现在要让计算机模拟这个计算的过程并且存入数组 不输出零就可以了 */ int kk[100005],cc[100005],temp[100005];memset(kk,0,sizeof(kk));memset(cc,0,sizeof(cc));                                                                memset(c,0,sizeof(c));cc[0]=a.length();//读取位数(长度) kk[0]=b.length();//读取位数(长度) for(int i=1;i<=cc[0];i++)//逐个存入 转为整形 cc[i]=a[cc[0]-i]-'0';for(int i=1;i<=kk[0];i++)//逐个存入 转为整形 kk[i]=b[kk[0]-i]-'0';c[0]=cc[0]-kk[0]+1;//cout<<c[0]<<endl;//例子300 100 c[0]=1 没问题 for(int i=c[0];i>0;i--){                                             memset(temp,0,sizeof(temp));//清空temp这个划水数组                            for(int j=1;j<=kk[0];j++)                                                  temp[i+j-1]=kk[j];//把kk数组存入temp里面                                 //for(int j=1;j<=kk[0];j++)                                                  //       cout<<temp[j]<<endl;   //temp为 001 没问题 temp[0]=i+kk[0]-1;//temp的最大位数 后面要用                                  while(DivisionCompare(cc,temp)>=0){c[i]++;     //compare能过说明可以除 答案加一Subduction(cc,temp);//答案每加一就把  kk数组  减一次     } }while(c[0]>0&&c[c[0]]==0) c[0]--;//去零cout<<"The answer of MaxDivision is = ";if(c[0]==0)  cout<<0;   //说明被除数小了 else{for(int i=c[0];i>0;i--)cout<<c[i];//逐位输出答案  }// cout<<cc[0]<<endl; 没问题 if(cc[0]!=0){//看看有没有余数 cout<<"   The Remainder  is = ";for(int i=cc[0];i>0;i--)cout<<cc[i];//逐位输出余数 }cout<<endl;
} 

来自祖安的简单计算器(高精度)相关推荐

  1. 英雄联盟祖安服务器位置,LOL公认的喷子大区,祖安大舞台,有“妈”你就来

    九零出品,必属精品 前言:是强者就来祖安"逼逼赖赖" 在英雄联盟刚刚开服时,服务器只有两个,艾欧尼亚和比尔吉沃特,分别对应着电信和网通大区,游戏界面属于欧美中世纪的复古风.不断有新 ...

  2. 用Python解“两个数的简单计算器”题

    7-12 两个数的简单计算器 本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加.减.乘.除或求余运算.题目保证输入和输出均不超过整型范围. 输入格式: 输入在一行中依次输入操作数1 ...

  3. 英雄联盟祖安服务器位置,LOL“4区版英雄联盟”:城区有2个,郊区有2个,山区有1个...

    相信对于很多联盟里的老玩家肯定都知道,LOL这款游戏自从上线以后,已经经历了10年的改版,基本上每一次改版都会有英雄重做,有技能调整有地图更新,然而就在这10年里面,有一点却没有改变,那就是联盟里面的 ...

  4. lol祖安服务器维护,LOL小学生最聚集10大服务器:艾欧尼亚倒数第一

    但凡提起LOL的小学生,估计不玩LOL的玩家都得抖三抖,那简直是种恐怖的存在,当然小学生并非单指那些上着学的孩子,而且游戏里的行为太过幼稚的玩家,其实每个大区都有这样的玩家,下面就是一位网友总结的小学 ...

  5. 的python输入两个运算数及一个运算符_用Python解“两个数的简单计算器”题

    7-12 两个数的简单计算器 本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加.减.乘.除或求余运算.题目保证输入和输出均不超过整型范围. 输入格式: 输入在一行中依次输入操作数1 ...

  6. php定义一个计算器函数,php学习之简单计算器实现代码

    PHP实现简单计算器 //单路分支 if(isset($_GET["sub"])) { $num1=true;//数字1是否为空标记 $num2=true;//数字2是否为空标记 ...

  7. lol祖安服务器维护,听说坑货都去玩LOL无限火力了?这些英雄终于可以拿出来秀啦!...

    原标题:听说坑货都去玩LOL无限火力了?这些英雄终于可以拿出来秀啦! 现在LOL全民流行的时候,也有不少宅女会选择节日开黑,这个时候我们的机会就来了.而正好最近无限火力开了,于是很多小学生都去玩了,那 ...

  8. 祖安服务器突然维护,新京报:警惕出口成脏的“祖安文化” 污染校园

    个别中小学生"出口成脏"让人担忧,但更该反思我们成年人是否是"脏话生产链条"的一环. ▲资料图.图/视觉中国 文 | 张丰 前不久听两个小男孩谈话,被他们的脏话 ...

  9. 祖安服务器位置,光明日报:不能坐视粗鄙的祖安文化侵蚀校园

    原标题:不能坐视粗鄙的"祖安文化"侵蚀校园 近年来,一种人称"祖安文化"的"骂人风潮"在很多游戏社区.社交媒体.视频剪辑网站走红.据媒体报道 ...

最新文章

  1. 送外卖最强的男人!!
  2. 1. 金融数学中的随机变分法-Wiener空间与Wiener泛函
  3. encodeURIComponent编码2次
  4. 如何设计一门语言(十)——正则表达式与领域特定语言(DSL)
  5. 复合文档(Compound Document)读写栗子
  6. 设计灵感|信息图表海报竟然能设计的这么有趣!
  7. Android JSON 数据解析 之原生 API
  8. PickerView的简单介绍
  9. 版本控制工具 Git 和SVN 的区别
  10. Java代理模式概述及应用场景
  11. Oracle12C日志出现error=904怎样解决
  12. 坚果pro2刷MIUI10
  13. 人脸表情识别相关研究
  14. Google Analytics与百度统计比较
  15. 按键精灵 - 安卓版 - 罗盘 - 八向方位模拟 - 自动寻路
  16. 1.background、color、渐变
  17. 自学编程的人,90%以上都会掉进这些坑,避开这些误区能提高N倍学习效率
  18. 调试经验——使用VBA在Excel中打开Word文档(Open Word file in Excel with VBA)
  19. AT88SC0104C加密芯片的工作原理
  20. 字符串的方法练习------Python篇

热门文章

  1. 我对const修饰符应用的理解
  2. nohup/SIGHUP的一个坑
  3. leaflet地图总结(不断更新)
  4. 《满江红》《流浪地球2》孰能胜出,元宇宙电影能否成为票房黑马?
  5. InsecureRequestWarning: Unverified HTTPS request is being made to host ‘api.ai.qq.com‘. Adding
  6. Laravel Model数据操作
  7. Docker 化你的 Go 应用程序
  8. 【项目实战】Redis使用场景之待支付订单自动取消、订单自动收货
  9. 小程序源码 租房管理系统_微信小程序-租房源码
  10. CSS打印样式研究与总结(一)