整数高精度计算
2016-10-01 21:30
302 查看
加法:
总结:
1、字符串输入,逆序存储;
2、逐位相加,保留余数,向前进位;
减法:
总结:
1、字符输入,逆序存储;
2、保证被减数大于减数;
3、去除高位0;
乘法:
c[i+j-1]=a[i]*b[j]+x+c[i+j-1]
除法(高精除低精)
除法(高精除高精)
#include <iostream> #include <cstring> using namespace std; int main(){ char aa[100],bb[100];int a[100],b[100],c[100]; int lena,lenb,lenc,i,x; memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c)); gets(aa);gets(bb); lena = strlen(aa);lenb = strlen(bb); for(i=0;i<lena;i++)a[lena-i]=aa[i]-48; for(i=0;i<lenb;i++)b[lenb-i]=bb[i]-48; lenc=1;x=0; while(lenc<=lena || lenc<=lenb){ c[lenc]=a[lenc]+b[lenc]+x; x=c[lenc]/10; c[lenc]%=10; lenc++; } c[lenc]=x; if(c[lenc]==0)lenc--; for(i=lenc;i>=1;i--)cout<<c[i]; cout<<endl; return 0; }
总结:
1、字符串输入,逆序存储;
2、逐位相加,保留余数,向前进位;
减法:
#include <iostream> #include <cstring> using namespace std; int main(){ int a[256],b[256],c[256]; char t[256],t1[256],t2[256]; int i,lena,lenb,lenc; memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c)); gets(t1);gets(t2); if((strlen(t1)<strlen(t2)) || (strlen(t1)==strlen(t2) && strcmp(t1,t2)<0)){ strcpy(t,t1); strcpy(t1,t2); strcpy(t2,t); cout<<"-"; } lena=strlen(t1);lenb=strlen(t2); for(i=0;i<lena;i++)a[lena-i]=t1[i]-48; for(i=0;i<lenb;i++)b[lenb-i]=t2[i]-48; i=1; while(i<=lena || i<=lenb){ if(a[i]<b[i]){ a[i]+=10; a[i+1]--; } c[i]=a[i]-b[i]; i++; } lenc=i; while(c[lenc]==0 && lenc>1)lenc--; for(i=lenc;i>=1;i--)cout<<c[i]; cout<<endl; return 0; }
总结:
1、字符输入,逆序存储;
2、保证被减数大于减数;
3、去除高位0;
乘法:
#include <iostream> #include <cstring> #include <cstdio> using namespace std; int main(){ char t1[256],t2[256];int a[256],b[256],c[256]; int x,i,j;int lena,lenb,lenc; memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c)); gets(t1);gets(t2); lena=strlen(t1);lenb=strlen(t2); for(i=0;i<lena;i++)a[lena-i]=t1[i]-48; for(i=0;i<lenb;i++)b[lenb-i]=t2[i]-48; for(i=1;i<=lena;i++){ x=0; for(j=1;j<=lenb;j++){ c[i+j-1]=a[i]*b[j]+x+c[i+j-1]; x=c[i+j-1]/10; c[i+j-1]%=10; } c[i+lenb]=x; } lenc=lena+lenb; while(c[lenc]==0 && lenc>1)lenc--; for(i=lenc;i>=1;i--)cout<<c[i]; cout<<endl; return 0; }
c[i+j-1]=a[i]*b[j]+x+c[i+j-1]
除法(高精除低精)
#include <iostream> #include <cstring> #include <cstdio> using namespace std; int main(){ char t[256];int a[256],c[256]; int b,lena,lenc,i,x; memset(a,0,sizeof(a));memset(c,0,sizeof(c)); gets(t);cin>>b; lena=strlen(t); for(i=0;i<lena;i++)a[i+1]=t[i]-48;//正序存储,从1开始 x=0; for(i=1;i<=lena;i++){ c[i]=(x*10+a[i])/b; x=(x*10+a[i])%b; } lenc=1; while(c[lenc]==0 && lenc<lena)lenc++; for(i=lenc;i<=lena;i++)cout<<c[i]; cout<<endl; return 0; }
除法(高精除高精)
#include <iostream> #include <cstring> #include <cstdio> using namespace std; int compare(int a[],int b[]); void jian(int a[],int b[]); int a[256],b[256],c[256]; int main(){ char s1[256],s2[256];int t[256];int i,j; memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c)); gets(s1);gets(s2); a[0]=strlen(s1);b[0]=strlen(s2);c[0]=a[0]-b[0]+1; for(i=0;i<a[0];i++)a[a[0]-i]=s1[i]-48; for(i=0;i<b[0];i++)b[b[0]-i]=s2[i]-48; for(i=c[0];i>0;i--){ memset(t,0,sizeof(t)); for(j=1;j<=b[0];j++)t[j+i-1]=b[j]; t[0]=b[0]+i-1; while(compare(a,t)>=0){c[i]++;jian(a,t);} } while(c[0]>0 && c[c[0]]==0)c[0]--; if(c[0]==0){ cout<<0<<endl; }else{ for(i=c[0];i>=1;i--)cout<<c[i]; cout<<endl; } return 0; } int compare(int a[],int b[]){ int i; if(a[0]>b[0])return 1; if(a[0]<b[0])return -1; for(i=a[0];i>0;i--){ if(a[i]>b[i])return 1; if(a[i]<b[i])return -1; } return 0; } void jian(int a[],int b[]){ int i,flag; flag = compare(a,b); if(flag==0){a[0]=0;return;} if(flag==1){ for(i=1;i<=a[0];i++){ if(a[i]<b[i]){a[i+1]--;a[i]+=10;} a[i]=a[i]-b[i]; } } while(a[0]>0 && a[a[0]]==0)a[0]--; return; }
相关文章推荐
- 接口完备的高精度整数计算类
- 用python写高精度的数据乘法,要求输入的书不大于256的正整数,计算其结果
- 【高精度计算 01】 大整数加法
- 高精度 大整数 计算 模板优化方向
- OpenJudge百炼-2981-大整数加法-C语言-高精度计算
- 【高精度计算 02】 大整数乘法
- OpenJudge百炼-2737-大整数除法-C语言-高精度计算
- 九度OJ-1198 高精度整数计算
- 高精度计算-大整数加减法
- 高精度计算-大整数除法
- 关于高精度正整数计算的JAVA实现
- 高精度计算-大整数乘法
- 华为机试:无线OSS-高精度整数加法、矩阵乘法计算量估算
- BZOJ 1263 SCOI 2006 整数划分 高精度
- 191. Number of 1 Bits (计算一个整数的二进制表示中有多少个1)
- C语言实现整数四则运算表达式的计算
- 写一段函数,计算无符号32位整数从高到低,第一个‘1’的位置。(例如,0x0F000000的第一个‘1’的位置为5)
- 高精度计算
- 13.计算一个整数数组的所有元素的和。
- 作业三-应用分支与循环结构解决问题——.输入一个整数 x,计算并输出下列分段函数 sign(x) 的值