十进制转k进制 k进制转十进制
生活随笔
收集整理的這篇文章主要介紹了
十进制转k进制 k进制转十进制
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
十進制轉k進制
手算方法:
例如,205.345(10) =11001101.01011(2) ,轉化時分為整數部分和小數部分
整數部分:除以k取余,寫的時候從下往上將余數寫出來即可
小數部分:乘以k取整,寫的時候從上往下將豎式的整數部分寫出來即可
代碼實現:
#include <bits/stdc++.h> using namespace std; typedef long long LL;void TentoAny(LL num,int k)//十進制數轉化為 k進制(2<=k<=36) {vector<char> v;//不定長數組LL t;//余數 while(num){t=num%k;if(t>=10)v.push_back((char)('A'+t-10));//向尾部添加元素else v.push_back((char)(t+'0'));num/=k;}for(int i=v.size()-1;i>=0;i--)//先算出來的余數最后輸出(逆序列)cout<<v[i];cout<<endl; } int main() {LL n;int k;cin>>n>>k;TentoAny(n,k);return 0; }代碼借鑒: https://blog.csdn.net/zqf3535/article/details/80197900
運行測試:
100(10) =1100100(2)
k進制轉十進制
手算方法:
第n位原本的數 x kn-1
整數部分與小數部分計算方法相同。整數部分最低位個位 n=1,小數部分最高位 n=0
也就是位權與基數的概念,上面寫的kn-1就是位權,k就是基數:(圖都是百度找的)
代碼實現:
#include <bits/stdc++.h> using namespace std; typedef long long LL;LL AnytoTen(string num,int k)//k進制轉化為十進制(2<=k<=36) {LL ans=0,tmp=1;//任何K的 0次冪為1int n=num.length();for(int i=n-1;i>=0;i--)//從低位開始 {int base;//該位本來的數if(num[i]>='A'&&num[i]<='Z')base=num[i]-'A'+10;else base=num[i]-'0';//字符轉化成數字ans+=tmp*base;//0次冪為1tmp*=k; }return ans; } int main() {string n;int k;cin>>n>>k;cout<<AnytoTen(n,k);return 0; }代碼借鑒: https://blog.csdn.net/zqf3535/article/details/80197900
運行測試:
32(16) =50(10)
總結
以上是生活随笔為你收集整理的十进制转k进制 k进制转十进制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: crh寄存器_CRL,CRH寄存器
- 下一篇: 计算机考研英语大纲,考研计算机大纲