1. 程式人生 > >26進位制乘法(模擬高精度)

26進位制乘法(模擬高精度)

題意:給你倆26進位制數(a對應0,b對應1…),求乘積
比賽的時候我的第一想法是把兩個數都變成10進位制,然後直接乘,乘出來再轉換為10進位制…然後就發現爆了unsigned long long….一臉懵逼。後來機智地發現GCC的__int128可以水過去…然後就沒有然後了…
不過,要是資料再大一點估計就GG了,所以還是要了解一下正解…其實也不難,就是模擬一下高精度演算法就行了….

#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int main()
{
    int
ans[60]={0},i,j,k; string str1,str2; cin>>str1>>str2; for(i=0;i<str1.size();i++)//必須從0開始...否則並不能從最末位開始覆蓋 for(j=0;j<str2.size();j++)//模擬高精度的方式還是要記一下.... ans[i+j]+=(int)(str1[0]-'a')*(str2[0]-'a'); int jin=0; for(i=0;i<str1.size()+str2.size();i++){ if
(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<<endl; return 0; }