當前位置:編程學習大全網 - 源碼下載 - 什麽是M進制?

什麽是M進制?

M只是代表未知數,可以是二進制,十進制,八進制,十六進制 N進制轉換成M進制 :N進制數轉換成10進制數 例如 11011(2)---> (10) 1*2^4+1*2^3+0*2^2+1*2^1+1*2^0=27 程序實現也簡單: (1)計算出原數的每壹位,並送進隊列 (2)取隊列第壹位元素(front)乘以N的 i 次冪,i 用隊列長度計數,最後求和 2:將上面的結果轉換為M進制數 例如 27(10)--->33 (8) 27/8=3……3; 3/8=0……3 余數的逆序即為結果 補充:大於10進制的進制必須處理ABCD…這個是關鍵 源碼:(這個源碼應該說功能上很完美了) #include <iostream> #include <queue> #include <stack> using namespace std; char * ntom(int n, int m, char *data,char *res_str);//N進制轉M進制 data是要轉的數字 res_str用來返回結果 int npow(int value,int pow);//冪計算 value的pow方 void main() { int n,m; char data[20]; char res_str[20]; cout<<"input N"<<endl; cin>>n; cout<<"input M"<<endl; cin>>m; cout<<"the transform value"<<endl; cin>>data; cout<<ntom(n,m,data,res_str)<<endl; } //冪函數的小遞歸 不解釋 int npow(int value,int pow) { int res=0; if(pow>0) { res=value*npow(value,pow-1); return res; } else return 1; } char* ntom(int n,int m,char *data,char *res_str) { queue<int> iq; stack<int> is; int len=strlen(data); //處理輸入data中的字符 也就是10進制以上的進制中出現的ABCD… while(len>0) { if(data[len-1]>='A'&& data[len-1]<='F') data[len-1]=10+(data[len-1]-'A')+'0'; iq.push(data[len-1]-'0'); len--; } //將data轉為10進制 並保存在val1中 val1是個中間值 int q_size=iq.size(); int val1=0; for(int ix=0;ix<q_size;ix++) { val1+=iq.front()*npow(n,ix); iq.pop(); } //將10進制數val1轉為M進制 並依次壓棧 int tmp2; while(val1>0) { tmp2=val1%m; is.push(tmp2); val1=val1/m; } int j=0; char res[20]; //轉換後的數如果存在ABCD…則處理 否則直接轉為字符 並保存於res中 while(!is.empty()) { if(is.top()>=10) res[j]='A'+(is.top()-10); else res[j]=is.top()+'0'; j++; is.pop(); } res[j]='\0';//從不忘記為字符數組的最後以為加上結束符 方便進行下面的strcpy strcpy(res_str,res); return res_str; }

采納哦

  • 上一篇:通達信量化選股公式是什麽?
  • 下一篇:短期震蕩技術指標組合CCI+RSI如何使用?
  • copyright 2024編程學習大全網