演算法學習之路|宇宙無敵加法器
地球人習慣使用十進位制數,並且預設一個數字的每一位都是十進位制的。而在PAT星人開掛的世界裡,每個數字的每一位都是不同進位制的,這種神奇的數字稱為“PAT數”。每個PAT星人都必須熟記各位數字的進製表,例如“……0527”就表示最低位是7進位制數、第2位是2進位制數、第3位是5進位制數、第4位是10進位制數,等等。每一位的進位制d或者是0(表示十進位制)、或者是[2,9]區間內的整數。理論上這個進製表應該包含無窮多位數字,但從實際應用出發,PAT星人通常只需要記住前20位就夠用了,以後各位預設為10進位制。
在這樣的數字系統中,即使是簡單的加法運算也變得不簡單。例如對應進製表“0527”,該如何計算“6203+415”呢?我們得首先計算最低位:3+5=8;因為最低位是7進位制的,所以我們得到1和1個進位。第2位是:0+1+1(進位)=2;因為此位是2進位制的,所以我們得到0和1個進位。第3位是:2+4+1(進位)=7;因為此位是5進位制的,所以我們得到2和1個進位。第4位是:6+1(進位)=7;因為此位是10進位制的,所以我們就得到7。最後我們得到:6203+415=7201。
輸入格式:
輸入首先在第一行給出一個N位的進製表(0 < N <=20),以回車結束。 隨後兩行,每行給出一個不超過N位的正的PAT數。
輸出格式:
在一行中輸出兩個PAT數之和。
輸入樣例:
30527
06203
415
輸出樣例:
7201
我的思路:
先將兩個數以十進位制方式相加,不進位。
栗子:
68+67= 12 15
這種方式。
然後我們根據給出的進製表,從個位開始依次判斷,多出的數進位,依次判斷並進位,最後,
得出最終結果。
#include<iostream>
#include<vector>
#include<cstdio>
#include<string>
using namespace std;
int main(){
vector<int> into;
string a,b;
int c;
cin>>a;
b=":::::::::::::::::::::::::::::::::::::::::"+a;//佔位符
for(int i=b.size()-1;i>=0;i--){
c=b[i]-`0`;
if(c==0)
c=10;
into.push_back(c);
}//構造進製表,0~40,:-‘0’為10,即十進位制。
vector<int>v1,v2;
cin>>a;
cin>>b;
if(a.size()>b.size()){
for(int i=b.size()-1;i>=0;i--)
v1.push_back(b[i]-`0`);
for(int i=a.size()-1;i>=0;i--)
v2.push_back(a[i]-`0`);
}
else{
for(int i=a.size()-1;i>=0;i--)
v1.push_back(a[i]-`0`);
for(int i=b.size()-1;i>=0;i--)
v2.push_back(b[i]-`0`);
}//v2儲存大的字元
for(int i=0;i!=v1.size();i++){
v2[i]+=v1[i];
}//兩數相加,以十進位制方式
for(int i=0;i<40;i++)
v2.push_back(0);
for(int i=0;i<v2.size();i++){
v2[i+1]+=v2[i]/into[i];//兩個式子順序尤為重要!式子2改變了源
v2[i]=v2[i]%into[i];
}
int flag=1;
for(int i=v2.size()-1;i>=0;i--){
if(v2[i]!=0)
flag=0;
if(flag==0)
cout<<v2[i];
}
if(flag==1){
cout<<0;
}
}
相關文章
- 演算法學習之路|划拳演算法
- 演算法學習之路|A除以B演算法
- 演算法學習之路|列印排名演算法
- 演算法學習之路|方格分割演算法
- 演算法學習之路|朋友數演算法
- 演算法學習之路|SpellItRight演算法
- 演算法學習之路|歐幾里得遊戲演算法遊戲
- 演算法學習之路|月餅演算法
- 演算法學習之路|PATRanking演算法
- 演算法學習之路|列印沙漏演算法
- 演算法學習之路|快速排序演算法排序
- 演算法學習之路|結繩演算法
- 演算法學習之路|數零壹演算法
- 演算法學習之路|開學寄語演算法
- 演算法學習之路|說反話演算法
- 演算法學習之路|幼兒園買玩具演算法
- 演算法學習之路|小賭怡情演算法
- 演算法學習之路|影像過濾演算法
- 演算法學習之路|日期問題演算法
- 演算法學習之路|賣個萌演算法
- 演算法學習之路|螺旋矩陣演算法矩陣
- 演算法學習之路|選擇題演算法
- 演算法學習之路|字元統計演算法字元
- 演算法學習之路|科學計數法演算法
- 演算法學習之路|PlayOnWords(尤拉道路+dfs)演算法
- 演算法學習之路|舊鍵盤打字演算法
- 演算法學習之路|最簡分數演算法
- 演算法學習之路|檢驗身份證演算法
- 演算法學習之路|愛丁頓數演算法
- L1-045 宇宙無敵大招呼 分數 5
- 演算法學習之路|最小生成樹——prime演算法演算法
- 強化學習之路一 QLearning 演算法強化學習演算法
- 演算法學習之路|個位數統計演算法
- 演算法學習之路|狀態壓縮dp演算法
- 演算法學習之路|棋盤問題(博弈)演算法
- 演算法學習之路|進位制轉換演算法
- Godot新手學習開篇綜合無敵大介紹Go
- 演算法學習之路|四平方和演算法