~|C++的高精度|[一]~

 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部分代码略过,详情请翻到

上一篇:[BZOJ3513] idiots - FFT,组合数学


下一篇:浅谈SPFA判负环