流體模擬Fluid Simulation(二):SPH基礎
阿新 • • 發佈:2022-05-05
實在不知道寫啥了,淺水一下
https://www.luogu.com.cn/problem/P1143
這是一道很典型的進位制轉換(好像跟沒說似的),我們要做到的就兩步:手寫理解進位制轉換,把思路換成程式碼寫進編譯器裡,那麼現在你就已經會做這道題了
我們先想手寫轉換怎麼寫:
1.先把輸入進來的數統一轉換成十進位制
一個數的每一位上都對應著一個東西——位權,這個東西就是每一位數的價值,位上數字*這個位的位權就等於這個數字在十進位制中的表示,即可得N進位制數的十進位制為各個位上的值與它的位權的積的和(不理解可以拿一個十進位制數推一下)
2.再把十進位制數轉換為N進位制數
這時我們就需要用到取餘法,簡單來說就是將數M一直/進位制N,並隨時記錄餘數,直到M/N,這時再將記錄的餘數逆序輸出,就是結果
不多掰扯,上程式碼
#include<iostream> #include<cmath> #include<cstdio> using namespace std; int a,b,i,c,n[50]; int main(){ string s; cin>>a>>s>>c; for(int i=s.size()-1;i>=0;i--){ if(s[i]>='A') b+=(s[i]-'A'+10)*pow(a,s.size()-1-i);//輸入進位制>9else b+=(s[i]-'0')*pow(a,s.size()-1-i); } //轉十進位制 for(i=0;b>0;i++){ n[i]=b%c; b=(b-n[i])/c; }//轉c進位制 i--; for(;i>=0;i--){ if(n[i]>=10) printf("%c",n[i]+'A'-10); else cout<<n[i]; }//輸出,別忘逆序 }