整数高精度算法
来源:互联网 发布:115 mac版 编辑:程序博客网 时间:2024/05/20 09:07
加法
#include<stdio.h>#include<string.h>#define N 510int main(){ char a[N],b[N]; while(scanf("%s%s",a,b)!=EOF) { int n_a[N]={0},n_b[N]={0},sum[N]={0},an,bn,k,i; an=strlen(a);bn=strlen(b); k=an>bn?an:bn; for(i=0;i<an;i++) n_a[i]=a[an-1-i]-'0'; for(i=0;i<bn;i++) n_b[i]=b[bn-1-i]-'0'; for(i=0;i<k;i++) sum[i]=n_a[i]+n_b[i]; for(i=0;i<k;i++) if(sum[i]>9) { sum[i+1]++; sum[i]%=10; } for(i=N-1;sum[i]==0&&i>0;i--)//除去前导零 ; for(;i>=0;i--) printf("%d",sum[i]); printf("\n"); } return 0;}
减法
#include<stdio.h>#include<string.h>#define N 110char a[N],b[N];int A[N],B[N],C[N];void solve(int a[],int b[]){ int i; for(i=0;i<N;i++) { C[i]=a[i]-b[i]; if(C[i]<0) C[i]+=10,a[i+1]-=1; }}int main(){ int i,j; while(scanf("%s%s",a,b)!=EOF) { memset(A,0,sizeof(A)); memset(B,0,sizeof(B)); memset(C,0,sizeof(C)); int la,lb,lA,lB; la=strlen(a),lb=strlen(b); for(i=la-1,j=0;i>=0&&j<la;i--,j++) { A[j]=a[i]-'0'; if(A[j]!=0) lA=j+1;//除去前导零的位数 } for(i=lb-1,j=0;i>=0&&j<lb;i--,j++) { B[j]=b[i]-'0'; if(B[j]!=0) lB=j+1; } if(lA>lB) solve(A,B); else if(lB>lA) { printf("-"); solve(B,A); } else { if(strcmp(a+la-lA,b+lb-lB)>=0) solve(A,B); else { printf("-"); solve(B,A); } } for(i=N-1;C[i]==0&&i>0;i--) ; for(;i>=0;i--) printf("%d",C[i]); putchar('\n'); } return 0;}
乘法
#include<stdio.h>#include<string.h>int main(){ int i,j,k,la,lb,n_a[50]={0},n_b[50]={0},sum[100]={0}; char a[50],b[50]; scanf("%s%s",a,b); la=strlen(a);lb=strlen(b); for(i=0;i<la;i++) n_a[i]=a[la-i-1]-'0'; for(i=0;i<lb;i++) n_b[i]=b[lb-i-1]-'0'; for(i=0;i<lb;i++) for(j=0;j<la;j++) sum[i+j]+=n_a[j]*n_b[i]; k=la+lb-1; for(i=0;i<k;i++) { sum[i+1]+=sum[i]/10; sum[i]%=10; } if(sum[i]) k++; for(i=k;sum[i-1]==0&&i>1;i--) ; for(i--;i>=0;i--) printf("%d",sum[i]);}
除法
#include<stdio.h>#include<string.h>#define Max 1005//A小于B返回-1,相等返回0,否则返回A的有效位数int fun(int A[],int B[],int la,int lb){ if(la<lb) return -1; int i; if(la==lb) { for(i=la-1; i>=0; i--) { if(A[i]>B[i]) break; if(A[i]<B[i]) return -1; } } for(i=0; i<la; i++) { A[i]=A[i]-B[i]; if(A[i]<0) A[i]+=10,A[i+1]-=1; } for(i=la-1; i>=0; i--) if(A[i]) return i+1;//找到最高不为零的位置 return 0;}int main(){ int ntime,ntemp,la,lb,A[Max],B[Max],C[Max]; char a[Max],b[Max]; while(scanf("%s%s",a,b)!=EOF) { for(int i=0; i<Max; i++) A[i]=B[i]=C[i]=0; la=strlen(a); lb=strlen(b); int lA,lB; for(int i=0,j=la-1; j>=0; i++,j--) { A[i]=a[j]-'0'; if(A[i]!=0) lA=i+1; } for(int i=0,j=lb-1; j>=0; i++,j--) { B[i]=b[j]-'0'; if(B[i]!=0) lB=i+1; } if(lA<lB) { printf("0\n"); continue; } ntime=lA-lB; for(int i=lA-1; i>=0; i--) { if(i>=ntime) B[i]=B[i-ntime]; else B[i]=0; }//将A,B化为相同位数,B的低位填0 lB=lA; for(int i=0; i<=ntime; i++) while((ntemp=fun(A,B+i,lA,lB-i))>=0) { lA=ntemp; C[ntime-i]++; } int i; for(i=Max-1; i>0&&C[i]==0; i--) ; for(; i>=0; i--) printf("%d",C[i]); putchar('\n'); } return 0;}
0 0
- 整数高精度算法
- 高精度整数开根号算法
- 完整整数高精度算法系统
- C++的高精度整数加法运算算法
- 实用算法实现-第 24 篇 高精度整数运算
- C语言无符号整数高精度算法试写
- 高精度整数除法
- 高精度整数运算
- 高精度整数除法
- 高精度 大整数加法
- 高精度整数加法
- 高精度整数加法
- 高精度大整数加法
- 高精度整数模板
- 高精度整数模板(转)
- 高精度整数加法
- 高精度整数的四则运算
- 整数高精度乘法
- Linux 驱动的写法
- Android内容提供程序
- 《程序猿的第n+3天》bootstrap做收缩导航
- 用户账号不可同时两处登入系统的控制
- 虚函数和纯虚函数的区别
- 整数高精度算法
- itchat 群用户搜索的踩坑记录
- codeforces round#404(div.2) C. Anton and Fairy Tale
- 使用jquery-datatable和bootsrap创建表格
- unity 屏幕旋转 相关 笔记
- jdk1.8新特性 分组统计及格式化
- 前端学习笔记之HTML DOM操作
- log4cplus的使用
- Servlet的自动加载