26进制乘法(模拟高精度)

题意:给你俩26进制数(a对应0,b对应1…),求乘积
比赛的时候我的第一想法是把两个数都变成10进制,然后直接乘,乘出来再转换为10进制…然后就发现爆了unsigned long long….一脸懵逼。后来机智地发现GCC的__int128可以水过去…然后就没有然后了…
不过,要是数据再大一点估计就GG了,所以还是要了解一下正解…其实也不难,就是模拟一下高精度算法就行了….

#include
#include
#include
using namespace std;
int main()
{
    int ans[60]={0},i,j,k;
    string str1,str2;
    cin>>str1>>str2;
    for(i=0;i//必须从0开始...否则并不能从最末位开始覆盖
        for(j=0;j//模拟高精度的方式还是要记一下....
            ans[i+j]+=(int)(str1[0]-'a')*(str2[0]-'a');
    int jin=0;
    for(i=0;iif(jin)ans[i]+=jin;
        jin=ans[i]/26;ans[i]%=26;
    }
    if(ans[str1.size()+str2.size()-1])
        cout<<(char)(ans[str1.size()+str2.size()-1]+'a');
    for(i=str1.size()+str2.size()-2;i>=0;i--)
        cout<<(char)(ans[i]+'a');
    cout<return 0;
}

你可能感兴趣的:(数学,高精度)