高精度c语言模板
来源:互联网 发布:java 批处理框架 编辑:程序博客网 时间:2024/05/16 04:31
#include"stdio.h"#include"iostream"using namespace std;#define maxlen 1000struct HP{int len,s[maxlen];};void PrintHP(HP x) {for(int i=x.len;i>=1;i--) cout<<x.s[i];}void Str2HP(const char *s,HP &x){x.len=strlen(s);for(int i=1;i<=x.len;i++) x.s[i]=s[x.len-i]-'0'; //倒着记录}void Int2HP(int inte,HP &x){if(inte == 0) {x.len=1;x.s[1]=0;return ;}for(x.len=0;inte>0;){x.s[++x.len]=inte%10;inte/10;}}void Multi(const HP a,const HP b,HP& c){int i,j;c.len=a.len+b.len;for(int i=1;i<=c.len;i++) c.s[i]=0;for(i=1;i<=a.len;i++) for(j=1;j<=b.len;j++) c.s[i+j-1]+=a.s[i]*b.s[j];for(i=1;i<c.len;i++) {c.s[i+1]+=c.s[i]/10;c.s[i]%10;}while(c.s[i]) {c.s[i+1]=c.s[i]/10;c.s[i]%=10;i++;}while(i>1&&!c.s[i]) i--;c.len=i;}void Plus(const HP a,const HP b,HP&c){int i;c.s[1]=0;for(i=1;i<=a.len||i<=b.len||c.s[i];i++){if(i<=a.len) c.s[i]+=a.s[i];if(i<=b.len) c.s[i]+=b.s[i];c.s[i+1]=c.s[i]/10;c.s[i]%=10;}c.len=i-1;if(c.len==0) c.len=1;}void Substract(const HP a,const HP b,HP&c){for(int i=1,j=0;i<=a.len;i++){c.s[i]=a.s[i]-j;if(i<=b.len) c.s[i]-=b.s[i];if(c.s[i]<0){j=1;c.s[i]+=10;}else j=0;}c.len=a.len;while(c.len>1&&!c.s[c.len]) c.len--;}int HPCompare(const HP x,const HP y){if(x.len>y.len) return 1;if(x.len<y.len) return -1;int i=x.len;while((i>1)&&(x.s[i]==y.s[i])) i--;return x.s[i]-y.s[i];}void Divide(const HP a,const HP b,HP &c,HP &d){int i,j;d.len=1;d.s[1]=0;for(i=a.len;i>0;i--){if(!(d.len==1&&d.s[1]==0)){for(j=d.len;j>0;j--)d.s[j+1]=d.s[j];++d.len;}d.s[1]=a.s[i];c.s[i]=0;while((j=HPCompare(d,b))>=0){Substract(d,b,d);c.s[i]++;if(j==0) break;}}c.len=a.len;while((c.len>1)&&(c.s[c.len]==0))c.len--;}int main(){HP a,b;char s1[100],s2[100];while(1){scanf("%s%s",s1,s2);Str2HP(s1,a);Str2HP(s2,b);HP c;Plus(a,b,c);//+PrintHP(c);printf("\n");Multi(a,b,c);//*PrintHP(c);printf("\n");Substract(a,b,c);//-PrintHP(c);printf("\n");HP d;Divide(a,b,c,d);// /PrintHP(c);printf("\n");printf("%d\n",HPCompare(a,b));//比较}return 0;}
0 0
- 高精度c语言模板
- 高精度运算模板C语言
- c高精度加法模板
- C语言 高精度加法
- C语言 高精度减法
- C语言 高精度乘法
- C语言 高精度除法
- C语言 高精度算法
- C语言高精度加法
- C++bign类高精度模板
- 高精度模板 c++/类封装
- C语言求高精度PI
- 高精度运算模版C语言
- C语言中的高精度乘法
- C语言 · 高精度乘法
- C语言 · 高精度乘法
- C语言 · 高精度乘法
- C语言 · 高精度乘法
- Web Service 之SOAP
- CSU-ACM2016暑假集训比赛7
- VMware Workstation Pro虚拟机安装Linux系统
- LeetCode 63 Unique Paths II
- 输入一个链表,从尾到头打印链表每个节点的值
- 高精度c语言模板
- 位运算的小技巧s
- 我的第一篇博客
- 《代码大全》读书笔记及随想(day06)
- scala基础41-Set/Map/TreeSet/TreeMap
- android中 finish()、onDestory()与system.exit(0)的区别
- 关于html:marquee属性的详解
- POJ 2263
- 5.shell编程(5) --- 文件描述符