欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c++高精度计算(加法)

程序员文章站 2022-03-30 11:30:16
本文提供给刚入坑的新手 关于高精度的计算网上百度一下可以了解到许多 今天我分享的只是一些自己的心得,更详细的可以去看原博主的原创文章(https://blog.csdn.net/fanyun_01/article/details/79967170),在阅读完之后可以来我这文章食用。 注意事项: 1. ......

本文提供给刚入坑的新手

关于高精度的计算网上百度一下可以了解到许多

今天我分享的只是一些自己的心得,更详细的可以去看原博主的原创文章(https://blog.csdn.net/fanyun_01/article/details/79967170),在阅读完之后可以来我这文章食用。

注意事项:

1.因为超出了普通储存数据的范围,所以通过以字符的形式输入到数组当中。

2.储存是将字符串从后往前储存到数组当中的。

下面是源码,我是在老樊lu码的原创源码上加以修改的:

  1. #include<iostream>

  2. #include<cstring>

  3. using namespace std;

  4. int main()

  5. {

  6. string str1,str2; 

  7. int a[250],b[250],len; //数组的大小决定了计算的高精度最大位数 
  8. int i; 

  9. memset(a,0,sizeof(a)); 

  10. memset(b,0,sizeof(b)); 

  11. cin>>str1>>str2; //输入两个字符串 

  12. a[0]=str1.length(); //取得第一个字符串的长度 

  13. for(i=1;i<=a[0];i++) //把第一个字符串转换为整数,存放在数组a中 
  14. a[i]=str1[a[0]-i]-'0'; //将第一个字符串中数据倒着输入到数组当中并用-'0'使其指向字符串中第一个字符 

  15. b[0]=str2.length(); //取得第二个字符串长度 

  16. for(i=1;i<=b[0];i++) //把第二个字符串中的每一位转换为整数,存放在数组b中 

  17. b[i]=str2[b[0]-i]-'0'; 

  18. len=(a[0]>b[0]?a[0]:b[0]); //取两个字符串最大的长度 

  19. for(i=1;i<=len;i++) //做按位加法,同时处理进位 

  20. a[i]+=b[i]; 

  21. cout<<"这是第 "<<i<<" 的值,此时a[i]= " <<a[i]; //在循环里面我决定使其更可视化,更能理解,于是加入了输出语句 

  22. a[i+1]+=a[i]/10; 

  23. cout<<"这是第 "<<i+1<<" 的值,此时a[i]= " <<a[i+1]; 

  24. a[i]%=10; 

  25. cout<<"这是第 "<<i<<" 的值,此时a[i]= " <<a[i]<<"\n"; 

  26. len++; //下面是去掉最高位的0,然后输出。 

  27. while((a[len]==0)&&(len>1)) len--; 

  28. for(i=len;i>=1;i--) 

  29. cout<<a[i]; 

  30. return 0; 

  31. }

以上就是源码了虽然更改不大,但是我觉得加入输出是对新手来说很有必有的。