大数问题
来源:互联网 发布:建筑业网络快报 编辑:程序博客网 时间:2024/06/07 19:40
一般来说加法没什么大问题,但是有一类加法,大数加法,即超过 long long 范围一般方法无法操作时,我们可以想到,是否可以用数组操作,每一位存一个;那么计算就能够进行了但有一点,就是加法的位数对齐问题我们常常想到的就是倒过来加,因为存的时候高位在前,所以应该倒这加。我相信大多数人都可以搞定,那么我们是否可以用更简便的方法呢例如string字符串,我们可以先将位数对齐再相加
#include<stdio.h>#include<string>#include<iostream>#include<cstring>using namespace std;int main(){ string a,b; cin>>a; cin>>b; int la=a.length(); int lb=b.length(); if(la>lb)//对齐位数 { for(int i=0;i<la-lb;i++) b='0'+b; } else if(la<lb) for(int i=0;i<lb-la;i++) a='0'+a; int de=0; for(int i=a.length()-1;i>=0;i--)//相加 { a[i]=a[i]-'0'+b[i]-'0'+de; de=a[i]/10; a[i]=a[i]%10+'0'; } if(de>0) printf("%d",de); cout<<a<<endl;}
大数乘法
#include<stdio.h>#include<string>#include<iostream>#include<cstring>using namespace std;int main(){ string a; int b; cin>>a; cin>>b; int de=0; for(int i=a.length()-1;i>=0;i--) { int c=a[i]-'0'; c=c*b+de; de=c/10; a[i]=c%10+'0'; } while(de!=0) { char c=de%10+'0'; a=c+a; de=de/10; } cout<<a<<endl;}
阶乘
#include<stdio.h>#include<string>#include<iostream>#include<cstring>using namespace std;int main(){ string a; int n; while(cin>>n) { a='1'; for(int i=1;i<=n;i++) { int de=0; for(int j=a.length()-1;j>=0;j--) { int c=a[j]-'0'; c=c*i+de; de=c/10; a[j]=c%10+'0'; } while(de!=0) { char c=de%10+'0'; a=c+a; de=de/10; } } cout<<a<<endl; }}
0 0
- 【大数问题】大数阶乘
- 大数问题
- 大数问题
- 大数问题
- 大数问题
- 大数问题
- 大数问题
- 大数问题 *
- 大数问题
- 大数问题
- 大数问题
- 大数问题
- 大数问题
- 大数问题
- 大数问题
- 大数问题
- 大数问题
- 大数问题
- 使用java8的选择Java运行的版本
- mycat后端连接状态变换图
- linux档案种类与扩展名
- SpringMVC跨域乱码问题
- C++宏定义详解
- 大数问题
- JQuery 干货篇之选择元素
- mysql建表语句以及添加外键报1215错误
- maven命令打包web项目(package_web.bat)
- C++之虚基类
- 前端几种本地缓存机制
- Redis slowlog
- jxl 读取excel 文件 Unable to recognize OLE stream
- Android中加载手机sd卡中的html文件