1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 using namespace std; 5 int main(){ 6 char a1[100],b1[100]; 7 int a[100],b[100],c[100],lena,lenb,lenc,i,x; 8 //设置数组变量 9 memset(a,0,sizeof(a)); 10 memset(b,0,sizeof(b)); 11 memset(c,0,sizeof(c)); 12 //数组初始化 13 gets(a1); 14 gets(b1); 15 //输入数组 16 lena=strlen(a1); 17 lenb=strlen(b1); 18 //计算长度 19 for(i=0;i<=lena-1;i++) a[lena-i]=a1[i]-48; 20 for(i=0;i<=lenb-1;i++) b[lenb-i]=b1[i]-48; 21 //将char类型a1和b1转化为int类型a和b 22 lenc=1; 23 //结果的长度 24 x=0; 25 //余数 26 while (lenc<=lena||lenc<=lenb){ 27 c[lenc]=a[lenc]+b[lenc]+x; 28 //计算 29 x=c[lenc]/10; 30 //计算余数 31 c[lenc]%=10; 32 //计算保留上一位数 33 lenc++; 34 //长度累加 35 } 36 //计算加法 37 c[lenc]=x; 38 //如果是低位数计算完后高一位,则添上 39 if(c[lenc]==0) lenc--; 40 //如果不是,再删去 41 for(i=lenc;i>=1;i--) cout<<c[i]; 42 //倒序输出 43 cout<<endl; 44 return 0; 45 }
如上文就是C++的高精度加法(蒟蒻程序),首先我们先看看什么是高精度:
高精度就是运用字符串或数组输入,再把字符串转化为数组进行计算输出的算法(个人理解,有错必纠)。
这个程序分为三部分——|输入 运算 输出|
首先是输入,我这里用的是字符串:
1 void init(int a[]){ 2 string s; 3 cin>>s;//读入字符串,也可以用get() 4 a[0]=s.length();//获得字符串长度,存入a[0]里面 5 for(int i=1;i<=a[0];i++) 6 a[i]=s[a[0]-i]-48;//转换为数组 7 }//还可以直接循环加数组输入(蒟蒻一笔带过)
再是运算:
1 int c[100]; 2 void add(int a[],int b[]){ 3 int i=1,x=0; 4 while((i<=lena)||(i<=lenb)){//lena和lenb分别表示数组a和数组b的长度 5 c[i]=a[i]+b[i]+x;//计算a+b+进位数 6 x=c[i]/10;//计算进位数 7 c[i]%=10;//计算剩下的一位数存到数组c 8 i++; 9 } 10 }
最后是输出(倒序输出):(o部分代码略过,详情请翻到