ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2020-12-09 22:32:25  阅读:147  来源: 互联网

标签:高精度 int memset C++ 数组 字符串 100


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

标签:高精度,int,memset,C++,数组,字符串,100
来源: https://www.cnblogs.com/JiuLongYun/p/14111383.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有