高精度减法(调试得人心烦意乱)
来源:互联网 发布:微信js sdk 分享 编辑:程序博客网 时间:2024/06/06 14:22
include<bits/stdc++.h>using namespace std;const int M=5000,N=20000,p=100000;//p是位数吧大概;好像并没有用到www; char s[2][N];int cheng[5]={1,10,100,1000,10000};//只能5; int n[2][M],l[2],sum[M],iter,tmp,itera,flag,l_n[2];bool compare(char*,char*);int main(){ memset(sum,0,sizeof(sum)); cin>>s[0]>>s[1];// cout<<compare(s[0],s[1])<<endl; if(!compare(s[0],s[1])) flag=1;// cout<<sum[M]<<endl; for(int i=0;i<=1;i++){ // cin>>s[i];//把input放在前面,便于先判断大小再直接转int; tmp=itera=iter=0; l[i]=strlen(s[i]); for(int j=0;j<l[i]/2;j++) //啊这一个,不能取等; swap(s[i][j],s[i][l[i]-j-1]); for(int j=0;j<l[i];j++){ //这不能取等(取等的现象:第一个n为负); if(iter>=5){ // 压位的数字(出错的现象:莫名其妙少数字或添了0); n[flag][itera++]=tmp; tmp=0; iter=0; } tmp+=(s[i][j]-48)*cheng[iter];//注意-48; iter++; }// cout<<endl<<iter<<' '<<tmp<<endl; if(tmp) {n[flag][itera]=tmp;l_n[flag]=itera;} else l_n[flag]=--itera; flag=(1-flag); //啊本来是用i来标n的但是呢嘿嘿嘿; }// for(int i=0;i<l[0];i++) cout<<s[0][i]; // reverse success;/* for(int i=0;i<=1;i++){ int flag=0; for(int j=l[i];j>=0;j--){ //不知道为什么从l[i]开始迭代; if(flag) printf("%05d",n[i][j]); else{ printf("%d",n[i][j]); flag=1; } } cout<<endl; }*/ //转int success;// for(int i=M-1;i>=0;i--) cout<<sum[i]<<' '; //要开始做减法了注意了啊各位看好b( ̄▽ ̄)d; for(int i=0;i<=max(l_n[1],l_n[0]);i++){ sum[i]+=n[0][i]-n[1][i]; if(sum[i]<0) {sum[i+1]--;sum[i]+=p;}//退位; }// cout<<l_n[1]; //length correct;// cout<<n[0][0]<<' '<<n[1][0]; int check=0; for(int i=0;i<M;i++) if(n[0][i]!=n[1][i]) {check=1;break;} //以下是两个数字一样时的输出; if(!check) {cout<<'0';return 0;} //以下是两个数字不一样时的输出; int begin=0,jb=0; if(flag==1) cout<<'-'; for(int i=M-1;i>=0;i--){ if(begin==0 && sum[i]) {begin=1;} if(begin==1 && jb==1) printf("%05d",sum[i]); if(begin==1 && jb==0) {printf("%d",sum[i]);jb=1;} }/**/ return 0;}bool compare(char *a,char *b){// cout<<endl;// cout<<"a=="<<a[0]<<endl<<"b=="<<b[0]<<endl; if(strlen(a)>strlen(b)) return 1; else if(strlen(a)<strlen(b)) return 0; for(int i=strlen(a)-1;i>=0;i--) if(a[i]!=b[i]){ if(a[i]>b[i]) return 1; else return 0; } return 0;}//注释掉的都是检验用代码呢;//苟屁!全tm是你的废话;
注意事项有:
1:const int 的p;
2:reverse时不能取到,会重复;
3:这个减法必须先判断谁大谁小,一点人生的经验;
4:本来用strcmp就行但是因为我的愚蠢(数组下标又搞错了(人体学自动加一屌不屌?))自己写了个compare;
千疮百孔啊;
洛谷的数据算是过了;
就这样;
阅读全文
0 0
- 高精度减法(调试得人心烦意乱)
- 高精度模板(减法)
- 高精度(大整数减法)
- 大数减法 (高精度运算)
- (C语言)高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 机器学习方法篇(6)------朴素RNN公式推导
- 跨域总结
- 笔记1
- 结果和伪类,伪元素总结
- 深入分析CAS
- 高精度减法(调试得人心烦意乱)
- 工作一个月有感
- 一个经典例子让你彻彻底底理解java回调机制
- Redis AOF 持久化学习笔记
- 排高低:冒泡与插入排序。不要管别人,自己设计的才是自己的。
- Python优先级队列实现
- 17_7_17:删除一个无头单链表的非尾节点。从尾到头打印单链表
- ECMAScript6箭头函数ArrowFunction"=>"
- 机器学习_朴素贝叶斯算法识别手写数字