高精度计算
2016-11-15 21:59
197 查看
【高精加】
【高精减】
【高精乘】
【高精除】
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[510],b[510],c[510];
inline int check(int a[],int b[])
{
if(a[0]<b[0]) return -1;
if(a[0]>b[0]) return 1;
for(int i=a[0];i;i--)
{
if(a[i]>b[i]) return 1;
if(a[i]<b[i]) return -1;
}
return 0;
}
inline void copy(int b[],int tmp[],int len)
{
for(int i=1;i<=b[0];i++) tmp[i+len-1]=b[i];
tmp[0]=b[0]+len-1;
}
inline void solve(int a[],int b[])
{
int t=check(a,b);
if(!t) {a[0]=0; return;}
if(t)
{
for(int i=1;i<=a[0];i++)
if(a[i]<b[i]) a[i+1]-=1,a[i]+=10,a[i]-=b[i];
else a[i]-=b[i];
}
while(a[0]&&!a[a[0]]) a[0]--;
}
inline void gaochu(int a[],int b[],int c[])
{
int tmp[510];
c[0]=a[0]-b[0]+1;
for(int i=c[0];i;i--)
{
memset(tmp,0,sizeof(tmp));
copy(b,tmp,i);
while(check(a,tmp)>=0) c[i]++,solve(a,tmp);
}
while(c[0]&&!c[c[0]]) c[0]--;
}
int main()
{
char ch=getchar();
while(!(ch>='0'&&ch<='9')) ch=getchar();
while(ch>='0'&&ch<='9') a[++a[0]]=ch-'0',c[a[0]]=a[a[0]],ch=getchar();
for(int i=a[0];i;i--) a[i]=c[a[0]-i+1];
while(!(ch>='0'&&ch<='9')) ch=getchar();
while(ch>='0'&&ch<='9') b[++b[0]]=ch-'0',c[b[0]]=b[b[0]],ch=getchar();
for(int i=b[0];i;i--) b[b[0]-i+1]=c[i];
memset(c,0,sizeof(c));
if(b[0]==1&&!b[1]) return 0;
gaochu(a,b,c);
for(int i=c[0];i;i--) printf("%d",c[i]);
return 0;
}
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int a[510],la,b[510],lb,c[510]; int main() { int x=0; char ch=getchar(); while(!(ch>='0'&&ch<='9')) ch=getchar(); while(ch>='0'&&ch<='9') a[++la]=ch-'0',c[la]=a[la],ch=getchar(); for(int i=la;i;i--) a[i]=c[la-i+1]; while(!(ch>='0'&&ch<='9')) ch=getchar(); while(ch>='0'&&ch<='9') b[++lb]=ch-'0',c[lb]=b[lb],ch=getchar(); for(int i=lb;i;i--) b[i]=c[lb-i+1]; int len=max(la,lb); memset(c,0,sizeof(c)); for(int i=1;i<=len;++i) c[i]+=a[i]+b[i],c[i+1]+=c[i]/10,c[i]%=10; while(c[len]>=10) c[len+1]=c[len]/10,c[len]%=10,len++; while(!c[len]) len--; for(int i=len;i>0;--i) printf("%d",c[i]); return 0; }
【高精减】
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int a[510],b[510],c[510],la,lb,len; inline void jian(int a[],int b[]) { for(int i=1;i<=len;++i) if(a[i]>=b[i]) c[i]+=a[i]-b[i]; else a[i+1]-=1,c[i]+=a[i]+10-b[i]; while(!c[len]) len--; } int main() { int x; char ch=getchar(); while(!(ch>='0'&&ch<='9')) ch=getchar(); while(ch>='0'&&ch<='9') a[++la]=ch-'0',c[la]=a[la],ch=getchar(); for(int i=la;i;i--) a[i]=c[la-i+1]; while(!(ch>='0'&&ch<='9')) ch=getchar(); while((ch>='0'&&ch<='9')) b[++lb]=ch-'0',c[lb]=b[lb],ch=getchar(); for(int i=lb;i;i--) b[i]=c[lb-i+1]; memset(c,0,sizeof(c)); len=max(la,lb); if(la<lb) jian(b,a),printf("-"); else jian(a,b); for(int i=len;i;i--) printf("%d",c[i]); return 0; }
【高精乘】
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int a[510],b[510],c[510],la,lb,len; int main() { int x; char ch=getchar(); while(!(ch>='0'&&ch<='9')) ch=getchar(); while(ch>='0'&&ch<='9') a[++la]=ch-'0',c[la]=a[la],ch=getchar(); for(int i=la;i;i--) a[i]=c[la-i+1]; while(!(ch>='0'&&ch<='9')) ch=getchar(); while(ch>='0'&&ch<='9') b[++lb]=ch-'0',c[lb]=b[lb],ch=getchar(); for(int i=lb;i;i--) b[i]=c[lb-i+1]; memset(c,0,sizeof(c)); for(int i=1;i<=la;++i) for(int j=1;j<=lb;++j) c[i+j-1]+=a[i]*b[j],c[i+j]+=c[i+j-1]/10,c[i+j-1]%=10; len=la+lb; while(c[len]>=10) c[len+1]=c[len]/10,c[len]%=10,len++; while(!c[len]) len--; for(int i=len;i;i--) printf("%d",c[i]); return 0; }
【高精除】
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[510],b[510],c[510];
inline int check(int a[],int b[])
{
if(a[0]<b[0]) return -1;
if(a[0]>b[0]) return 1;
for(int i=a[0];i;i--)
{
if(a[i]>b[i]) return 1;
if(a[i]<b[i]) return -1;
}
return 0;
}
inline void copy(int b[],int tmp[],int len)
{
for(int i=1;i<=b[0];i++) tmp[i+len-1]=b[i];
tmp[0]=b[0]+len-1;
}
inline void solve(int a[],int b[])
{
int t=check(a,b);
if(!t) {a[0]=0; return;}
if(t)
{
for(int i=1;i<=a[0];i++)
if(a[i]<b[i]) a[i+1]-=1,a[i]+=10,a[i]-=b[i];
else a[i]-=b[i];
}
while(a[0]&&!a[a[0]]) a[0]--;
}
inline void gaochu(int a[],int b[],int c[])
{
int tmp[510];
c[0]=a[0]-b[0]+1;
for(int i=c[0];i;i--)
{
memset(tmp,0,sizeof(tmp));
copy(b,tmp,i);
while(check(a,tmp)>=0) c[i]++,solve(a,tmp);
}
while(c[0]&&!c[c[0]]) c[0]--;
}
int main()
{
char ch=getchar();
while(!(ch>='0'&&ch<='9')) ch=getchar();
while(ch>='0'&&ch<='9') a[++a[0]]=ch-'0',c[a[0]]=a[a[0]],ch=getchar();
for(int i=a[0];i;i--) a[i]=c[a[0]-i+1];
while(!(ch>='0'&&ch<='9')) ch=getchar();
while(ch>='0'&&ch<='9') b[++b[0]]=ch-'0',c[b[0]]=b[b[0]],ch=getchar();
for(int i=b[0];i;i--) b[b[0]-i+1]=c[i];
memset(c,0,sizeof(c));
if(b[0]==1&&!b[1]) return 0;
gaochu(a,b,c);
for(int i=c[0];i;i--) printf("%d",c[i]);
return 0;
}
相关文章推荐
- 高精度计算 大数乘法
- 高精度计算----加法运算(续)
- C++高精度计算代码运行时间(转载)
- 阶乘计算(高精度)
- 高精度计算模板——棋盘覆盖问题
- 【高精度计算】《算法竞赛入门经典》bign类型运算符重载
- 一种高精度低复杂度的非线性函数定点计算方法
- 高精度计算----减法运算
- 用python写高精度的数据乘法,要求输入的书不大于256的正整数,计算其结果
- 1159. Sum 高精度的计算 注意细心啊 很好的题呢 有考察函数调用
- 大数,高精度计算---大数减法
- Java的两个高精度计算的类:BigInteger,BigDecimal
- 整理我以前的PASCAL源程序-高精度计算(2)计算自然对数底e
- 高精度时间差计算代码
- Java使用BigDecimal进行高精度计算的示例代码
- 大数,高精度计算---高精度幂次
- HDU 1042 N!(高精度计算阶乘)
- 大数,高精度计算---大数阶乘
- hdu6206—Apple(计算几何+高精度)
- 【高精度计算 02】 大整数乘法