C/C++编程小练习 大数加法之浮点大数加法算法
来源:互联网 发布:php get object vars 编辑:程序博客网 时间:2024/06/01 09:17
#include <iostream>#include <cstring>using namespace std;void reverse_str(char *a,int size){for(int i=0;i<size/2;++i){char t=a[i];a[i]=a[size-i-1];a[size-i-1]=t;}}int f_to_i(char *a,char *c){//将浮点数字符串转化为整形字符串,并返回浮点数小数部分的长度int len=strlen(a);char *p1=a;char *p2=NULL;for(int i=0;i<len;++i){if(a[i]=='.'){a[i]='\0';p2=&a[i+1];break;}}strcat(p1,p2);strcpy(c,p1);return strlen(p2)+1;}//核心思想就是按照小数点位置坐对其处理,小数部分较短的那个数补0void large_float_sum(char a[],char b[],char c[]){//打印出结果并把结果放到c中char p1[20000]={0};char p2[20000]={0};int pos1=f_to_i(a,p1);int pos2=f_to_i(b,p2);int max_pos;if(pos1>pos2){//给小数部分长度较短的那个数补0,以便后续的大数加法处理int t=pos1-pos2;int len=strlen(p2);int i;for(i=0;i<t;++i){p2[i+len]='0';}p2[i+len]='\0';max_pos=pos1;}else{int t=pos2-pos1;int len=strlen(p1);int i;for(i=0;i<t;++i){p1[len+i]='0';}p1[i+len]='\0';max_pos=pos2;}//cout<<p1<<endl;//cout<<p2<<endl;int a_len=strlen(p1);int b_len=strlen(p2);reverse_str(p1,a_len);reverse_str(p2,b_len);int max_len=a_len>b_len?a_len:b_len;int i;for(i=0;i<a_len||i<b_len;++i){c[i]+=p1[i]+p2[i]-'0'-'0';if(i>=a_len||i>=b_len){c[i]+='0';}if(c[i]>9){c[i]-=10;c[i+1]+=1;}}int j;for(j=max_len;j>0;--j){//去0if(c[j]!=0){break;}}for(int i=j;i>=max_pos;--i){cout<<(int)c[i];}cout<<".";for(int i=max_pos-1;i>=0;--i){cout<<(int)c[i];}cout<<endl;}int main(){char a[20000]={0};char b[20000]={0};char c[40001]={0};cin>>a;cin>>b;large_float_sum(a,b,c);return 0;}
0 0
- C/C++编程小练习 大数加法之浮点大数加法算法
- C/C++编程小练习 大数乘法之浮点大数乘法算法
- C/C++编程小练习 大数减法之浮点大数减法算法
- C语言 加法 大数加法
- 大数加法模板(c++)
- C语言大数加法
- 大数加法(C语言)
- 大数 加法 c语言
- C语言大数加法
- C语言大数加法
- c语言大数加法
- C语言-大数加法
- 大数浮点数加法
- 每日算法之大数加法
- 浮点数的大数加法
- 大数加法算法
- 大数加法运算算法
- 算法提高 大数加法
- asp.net core使用mysql.data和dapper操作mysql数据库
- v-if 和v-show
- Android文件存储总结
- 监听插拔SD卡
- 装饰者模式总结
- C/C++编程小练习 大数加法之浮点大数加法算法
- 【Jsp+Servlet】Jsp内置对象-Request
- CentOS7虚拟机IP配置
- java 多线程之ThreadPoolExecutor参数设置
- Climbing Stairs
- 新建wifi命令
- v-if 和 v-show
- ZCMU—1587
- 8-使用QT5的鼠标事件和滚轮事件