1. 程式人生 > 其它 >流體模擬Fluid Simulation(二):SPH基礎

流體模擬Fluid Simulation(二):SPH基礎

實在不知道寫啥了,淺水一下

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);//輸入進位制>9
        
else 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]; }//輸出,別忘逆序 }