- 问题http://codevs.cn/problem/3117/
- #include<iostream>
- #include<string>
- using namespace std;
- string a,b;
- string jg[10];//从0-9结果集
- string addtion(string a,string b){
- //翻转、补零操作
- int max_length=a.length()>b.length()? a.length():b.length();
- string str;
- for(int i=0;i<a.length();i++){
- str+=a[a.length()-1-i];
- }
- a=str;str="";
- for(int i=0;i<b.length();i++){
- str+=b[b.length()-1-i];
- }
- b=str;str="";
- for(int i=a.length();i<max_length;i++){
- a+="0";
- }
- for(int i=b.length();i<max_length;i++){
- b+="0";
- }
- int c=0;
- string r;
- for(int i=0;i<a.length();i++ ){
- int x=a[i]-'0';
- int y=b[i]-'0';
- int jieguo=(x+y+c)%10;
- c=(x+y+c)/10;
- r+=(char)(jieguo+'0');
- }
- if(c==0)return r;
- return r+=(char)(c+'0');
- }
- void re(string& x){
- string str;
- for(int i=0;i<x.length();i++){
- str+=x[x.length()-1-i];
- }
- x=str;
- }
- void jl(string& x,int n){
- for(int i=0;i<n;i++){
- x+='0';
- }
- }
- string dcheng(int x,string str){
- string r;
- int c=0;
- re(str);
- for(int i=0;i<str.length();i++){
- int y=str[i]-'0';
- r+=(char)((x*y+c)%10+'0');
- c=(x*y+c)/10;
- }
- if(c==0){
- re(r);
- return r;
- }else{
- r+=(char)(c+'0');
- re(r);
- return r;
- }
- }
- int main(){
- cin>>a>>b;
- re(b);
- string c="0";//结果
- for(int i=0;i<b.length();i++){//使用b乘以a
- int x=b[i]-'0';
- if(jg[x]==""){
- jg[x]=dcheng(x,a);
- }
- string t=jg[x];
- jl(t,i);//补零
- c=addtion(c,t);
- re(c);
- }
- cout<<c<<endl;
- return 0;
- }
高精度乘法
最新推荐文章于 2022-04-09 14:06:26 发布