大数问题
发布时间:2020-12-14 03:14:16 所属栏目:大数据 来源:网络整理
导读:一般来说加法没什么大问题,但是有一类加法,大数加法,即超过 long long 范围一般方法无法操作时,我们可以想到,是否可以用数组操作,每一位存一个;那么计算就能够进行了但有一点,就是加法的位数对齐问题我们常常想到的就是倒过来加,因为存的时候高位在
一般来说加法没什么大问题,但是有一类加法,大数加法,即超过 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; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- [译] 现代垃圾回收
- delphi – 如何将我发布的属性放入Object Inspector的指定类
- 数据挖掘之数据处理——SVM神经网络的数据分类预测-意大利葡
- delphi – 如何知道我的应用程序是否可见?
- 【杭电-oj】-1002-A + B Problem II(大数相加)
- delphi – 将长Unicode字符串传递给FireDac TADQuery参数
- Lua中对于UTF-8字符串的处理
- UVa 12333 - Revenge of Fibonacci (大数 + 字典树)
- java – 泽西岛中两个资源的相同路径
- HDU-1041-Computer Transformation(规律题 && 大数