【POJ2389】 Bull Math (multiplication de grands nombres)

Bull Math

Limite de temps: 1000 MS Limite de mémoire: 65536 Ko Format E / S 64 bits:% lld &% llu
Soumettre

Statut

La description

Les taureaux sont tellement meilleurs en mathématiques que les vaches. Ils peuvent multiplier d'énormes nombres entiers ensemble et obtenir des réponses parfaitement précises… du moins c'est ce qu'ils disent. Le fermier John se demande si leurs réponses sont correctes. Aidez-le à vérifier les réponses des taureaux. Lisez deux entiers positifs (pas plus de 40 chiffres chacun) et calculez leur produit. Sortez-le comme un nombre normal (sans zéros non significatifs).

Contribution

  • Lignes 1..2: Chaque ligne contient un seul nombre décimal.

Production

  • Ligne 1: le produit exact des deux lignes d'entrée

Exemple d'entrée

11111111111111
1111111111

Exemple de sortie

12345679011110987654321

Le plus grand processus de simulation est la multiplication de deux grands nombres. Il faut donc d'abord simuler la multiplication des grands nombres et des entiers, car c'est la multiplication des grands nombres et des entiers, il faut donc d'abord simuler l'addition de grands nombres.

#include "iostream"
#include "cstdio"
#include "cstring"
#include "algorithm"

using namespace std;

const int maxn = 1e2+5;

string str1,str2;

string sum(string s1,string s2)  //大数加法  
{  
    if(s1.length()<s2.length())  
    {  
        string temp=s1;  
        s1=s2;  
        s2=temp;  
    }  
    int i,j;  
    for(i=s1.length()-1,j=s2.length()-1;i>=0;i--,j--)  
    {  
        s1[i]=char(s1[i]+(j>=0?s2[j]-'0':0));    
        if(s1[i]-'0'>=10)  
        {  
            s1[i]=char((s1[i]-'0')%10+'0');  
            if(i) s1[i-1]++;  
            else s1='1'+s1;  
        }  
    }  
    return s1;  
} 

string Mult(string s,int x)  //大数乘以整形数  
{  
    reverse(s.begin(),s.end());  
    int cmp=0;  
    for(int i=0;i<s.size();i++)  
    {  
        cmp=(s[i]-'0')*x+cmp;  
        s[i]=(cmp%10+'0');  
        cmp/=10;  
    }  
    while(cmp)  
    {  
        s+=(cmp%10+'0');  
        cmp/=10;  
    }  
    reverse(s.begin(),s.end());  
    return s;  
}  

string Multfa(string x,string y)  //大数乘法  
{  
    string ans;  
    for(int i=y.size()-1,j=0;i>=0;i--,j++)  
    {  
        string tmp=Mult(x,y[i]-'0');  
        for(int k=0;k<j;k++)  
            tmp+='0';  
        ans=sum(ans,tmp);  
    }  
    return ans;  
}  

int main(){
        cin>>str1;
        cin>>str2;
        string gao = Multfa(str1,str2);
        cout<<gao<<endl;
    return 0;
}

Je suppose que tu aimes

Origine blog.csdn.net/thesprit/article/details/51971875
conseillé
Classement