整数大数相乘
2014-08-07 18:56
253 查看
大数相乘要用到大数加法,前边已经写过大数加法,在这儿直接调用。
#include<stdio.h> #include<iostream> #include<string> #include<algorithm> #include<string.h> using namespace std; string add(string st1,string st2) { if(st1.size()<st2.size()) //判断哪个长 { string stemp=st1; st1=st2; st2=stemp; } reverse(st1.begin(),st1.end()); //将string类st1,st2逆转顺序 reverse(st2.begin(),st2.end()); int len1,len2; len1=st1.length(); //计算各自的长度 len2=st2.length(); int in=0,num; //进位in初始化为0 for(int i=0; i<len2; i++) { num=st1[i]-'0'+st2[i]-'0'+in; //各位的和 in=num/10; num%=10; st1[i]=num+'0'; //放入较长的string里 } for(int j=len2; j<len1; j++) //如果遇到例如123 99892这样的样例,123处理完后需要向前边进位 { num=st1[j]-'0'+in; in=num/10; num%=10; st1[j]=num+'0'; } if(in==1) //相加的结果比原有的string都长 st1+="1"; reverse(st1.begin(),st1.end()); return st1; } string multiplication(string st1,string st2) { if(st1[0]=='0'||st2[0]=='0') return "0"; reverse(st1.begin(),st1.end()); reverse(st2.begin(),st2.end()); int len1,len2,len; len1=st1.length(),len2=st2.length(); if(len1<len2) { string stemp=st1; st1=st2; st2=stemp; } len1=st1.size(); len=len2=st2.length(); string stnum; for(int i=0; i<len; i++) { string stemp; for(int k=0; k<i; k++) { stemp+="0"; } int muti,in=0; for(int j=0; j<len1; j++) { muti=(st2[i]-'0')*(st1[j]-'0')+in; in=muti/10; muti=muti%10; stemp+=muti+'0'; } if(in>0) stemp+=in+'0'; reverse(stemp.begin(),stemp.end()); // cout<<stemp<<endl; stnum= add(stnum,stemp); } return stnum; } int main() { // freopen("INput.txt","r",stdin); // freopen("OUT.txt","w",stdout); string s1,s2; while(cin>>s1>>s2) { cout<<multiplication(s1,s2)<<endl; } return 0; }
相关文章推荐
- 百练_2980大整数乘法(大数相乘)
- JS实现大数(整数)相乘
- 【java】BigDecimal、BigInteger、大数相乘、数值的整数次方、快速乘法
- JS实现两个大数(整数)相乘
- 华为OJ机试题目:两个大整数相乘(纯C语言实现两个大整数相乘,两种方法实现大数相乘)
- 大数相乘的问题——大数阶乘(整数)
- 大数算法 -- 正整数相乘(Java 实现)
- 大整数相乘和大数阶乘实现
- 两个整数的大数相乘
- 大数对整数的相除、取模、相乘运算
- 整数的大数相乘
- JS实现两个大数(整数)相乘 实例代码
- C 语言 实现大数相乘问题(包括正、负整数,另外还附有详细注释)
- 大整数相乘
- 大数相乘+大数相加
- poj2389 大数相乘
- 43. Multiply Strings(大数相乘)
- 大数相乘
- 大数相乘