2023年12月14日發(作者:我感恩)

cc++進制轉換方法匯總(含全部代碼)
進制轉換方法匯總表
原進制
十進制
十進制
十進制
十進制
二進制
二進制
二進制
八進制
八進制
八進制
十六進制
十六進制
十六進制
轉換進制
二進制
八進制
十六進制
其他進制
八進制
十進制
十六進制
二進制
十進制
十六進制
二進制
八進制
十進制
方法1
bitt指定格式輸出
oct/%o指定格式輸出
hex/%x指定格式輸出
三位一組
按權展開
四位一組
一位換三
按權展開
一位換四
按權展開
方法2
流
流
流
流
流
流
方法3
除留余數法
除留余數法
除留余數法
除留余數法
除留余數法
除留余數法
方法4
itoa
itoa
itoa
itoa
strtol
strtol
strtol
基本操作函數:
Atoi(string &S, int R) 任意進制轉十進制(All Radix to Int) 參數:任意進制字符串 進制R 作用:利用按權展開加和,返回十進制
Itoa(int Num,int R) 十進制轉任意進制(Int to All Radix)參數:十進制數Num,進制R 作用:利用除留余數法,返回逆序的余數,即返回
所要轉換的進制數
功能實現函數:
ToAll() 十進制轉任意進制 調用函數Itoa,自帶的itoa
ToDecimal(string &S) 任意進制轉十進制函數 調用Atoi函數,strtol函數
ZhiDing() 作用:利用std的hex dec 以及 bitt,c語言的%o,%x
Stream() 作用:利用sstream頭文件將數按某進制讀入流,輸出流
1.任意進制轉十進制
【分析】按權展開,求和即可。例如,二進制數110,即4+2+0=6;另外,不想自己寫的話,有函數(百度百科)。
long int strtol(const char *nptr,char **endptr,int ba);參數:字符串,非法字符指針,字符串中的進制
考慮的很詳細,字符串中含有非法的字符(,.*等)時還能停止轉換,并返回指針。
2.十進制轉任意進制
【分析】除留余數法,逆序輸出余數即可。另外,如果自己不想寫的話,有函數。
string itoa(int x,char *string,int jz);參數:想要轉換的數,轉換結果字符串,轉換結果的進制
3.指定格式與流
【分析】主要是八進制、十進制和十六進制。對c來說是%o%d,%x;對c++來說是oct,dec,hex。作者感覺所謂的指定格式是輸入輸出
流,sstream的stringstream類是字符串流,本質上應該是差不多的,就寫在了一起。學的不深,沒有看標準庫中類的源代碼,請大神指
點。
4.二、八、十六之間的轉換
【分析】表格里面的一位換四,三位一組之類的是指通過二進制。例如,二進制與八進制進行轉換,二進制的110就是八進制的6。反過
來,八進制轉為二進制,只需要一位轉換為三位,6換為110即可。由于也不多,大家都很熟悉,沒必要用除留余數法,可以自己寫個映射
之類的。至于八進制與十六進制的轉換,可以利用二進制或十進制作為跳板。(這個代碼里面沒有,讀者可以嘗試寫一下)
5.全部代碼
/*
Project: 進制轉換(Radix)
Date: 2019/02/24
Author: Frank Yu
基本操作函數:
Atoi(string &S, int R) 任意進制轉十進制(All Radix to Int) 參數:任意進制字符串 進制R 作用:利用按權展開加和,返回十進制
Itoa(int Num,int R) 十進制轉任意進制(Int to All Radix)參數:十進制數Num,進制R 作用:利用除留余數法,返回逆序的余數,即返回所要轉換的進制數
功能實現函數:
ToAll() 十進制轉任意進制 調用函數Itoa
ToDecimal(string &S) 任意進制轉十進制函數 調用Atoi函數,strtol函數
ZhiDing() 作用:利用std的hex dec 以及 bitt,c語言的%o,%x
Stream() 作用:利用sstream頭文件將數按某進制讀入流,輸出流
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define Max 100
//進制權值
int power(int R,int turn)
{
int ans = 1;
while (turn--)
{
ans = ans*R;
}
return ans;
}
//**************************************基本操作函數**********************************//
//任意進制轉十進制(All Radix to Int) 參數:任意進制字符串 進制R 作用:利用按權展開加和,返回十進制
long int Atoi(string &S, int R)
{
long int ans = 0;
for (int i=0;i < ();i++)//按權展開
{
ans += (S[i] - '0') * power(R, () - i - 1);
}
/* 網上代碼 不理解(已了解,舉例,十六進制時t可能為f,那么f-'a'=5,再加10就是15了)
int ans=0;
for (int i = 0;i<();i++)
{
char t = s[i];
if (t >= '0'&&t <= '9') ans = ans*radix + t - '0';
el ans = ans*radix + t - 'a' + 10;
}*/
return ans;
}
}
//十進制轉任意進制(Int to All Radix)參數:十進制數Num,進制R 作用:利用除留余數法,返回逆序的余數,即返回所要轉換的進制數
string Itoa(int Num,int R)
{
string remain="";
int temp;
do {
temp = Num%R;//取余
Num /= R;
if (temp >= 10)
remain += temp - 10 + 'A';//任意進制為大于基數大于10的進制 例如,十六進制
el remain += temp + '0';
} while (Num);
rever((),());//逆序
return remain;
}
//**************************************功能實現函數**********************************//
//菜單
void menu()
{
cout << "************1.十進制轉任意進制(除留余數) 2.任意進制轉為十進制(按權展開)****" << endl;
cout << "************3.十進制指定格式輸出(二、八、十六) 4.利用流****************************" << endl;
cout << "************5.退出" << endl;
}
void menu1()
{
cout << "************1.十進制轉二進制 2.十進制轉八進制****" << endl;
cout << "************3.十進制轉十六進制 4.退出**************" << endl;
}
void menu2()
{
cout << "************1.十進制轉八進制 2.十進制轉十六進制**************" << endl;
cout << "************3.八進制轉十進制 4.十六進制轉十進制**************" << endl;
cout << "************5.退出" << endl;
}
//十進制轉任意進制 調用函數Itoa,自帶的itoa
void ToAll()
{
int num, R;char str[Max];
cout << "請輸入數和進制:" << endl;
cin >> num >> R;
cout << num << "轉換為"< cout << "利用itoa函數:" < } //任意進制轉十進制函數 調用Atoi函數,strtol函數 void ToDecimal(string &S) { int R; cout << "請輸入數和進制:" << endl; cin >>S>>R; cout < //利用strtol函數 long int strtol(const char *nptr,char **endptr,int ba) //參數,字符串,非法字符指針,字符串中的進制 char nptr[Max],*stop; strcpy(nptr,S.c_str());//string類型轉換為char cout< } //作用:利用std的hex dec 以及 bitt,c語言的%o,%x void ZhiDing() { int num;int choice = 0; cout << "請輸入十進制數:" << endl; cin >> num; while (1) { menu1(); printf("請輸入菜單序號:n"); scanf("%d", &choice); if (4 == choice) break; switch (choice) { ca 1:cout << num <<"轉為二進制(利用bitt):"< ca 2: { cout << num << "轉為八進制(利用oct):" << oct << num << endl; printf("轉為八進制(利用o):%on",num);//8位,高位補0 }break; ca 3: { cout << num << "轉為十六進制:" << hex << num << endl; printf("轉為十六進制(利用x):%xn", num); }break; default:printf("輸入錯誤n");break; } } } //作用:利用sstream頭文件將數按某進制讀入流,輸出流 void Stream() { string s;int choice = 0; stringstream ss;int num; while (1) { menu2(); printf("請輸入菜單序號:n"); scanf("%d", &choice); if (5 == choice) break; switch (choice) { ca 1: { cout << "請輸入一個數:" << endl; cin >> num; ();//清空一下,防止出錯 ss << oct << num;//十進制轉為八進制讀入流中 ss >> s;//轉換的八進制數放入字符串s中 cout << num << "轉為八進制(利用流):" << s << endl; }break; ca 2: { cout << "請輸入一個數:" << endl; cin >> num; ();//清空一下,防止出錯 ss << hex << num;//十進制轉為十六進制讀入流中 ss >> s;//轉換的十六進制數放入字符串s中 cout << num << "轉為十六進制(利用流):" << s << endl; }break; ca 3: { cout << "請輸入一個數:" << endl; cin >> s; ();//清空一下,防止出錯 ss << oct << s;//將s以八進制形式讀入流中 ss >> num;//以十進制輸入到num中 cout << s << "轉為十進制(利用流):" << num << endl; }break; ca 4: { cout << "請輸入一個數:" << endl; cin >> s; ();//清空一下,防止出錯 ss << hex << s;//將s以八進制形式讀入流中 ss >> num;//以十進制輸入到num中 cout << s << "轉為十進制(利用流):" << num << endl; }break; default:printf("輸入錯誤n");break; } } } //主函數 int main() { int choice = 0; string S; while (1) { menu(); printf("請輸入菜單序號:n"); scanf("%d", &choice); if (5 == choice) break; switch (choice) { ca 1:ToAll();break; ca 2:ToDecimal(S);break; ca 3:ZhiDing();break; ca 4:Stream();break; default:printf("輸入錯誤n");break; } } return 0; } 更多數據結構與算法實現: 有問題請下方評論,轉載請注明出處,并附有原文鏈接,謝謝!如有侵權,請及時聯系。 -

本文發布于:2023-12-14 11:38:01,感謝您對本站的認可!
本文鏈接:http://www.newhan.cn/zhishi/a/1702525081121347.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:cc++進制轉換方法匯總(含全部代碼).doc
本文 PDF 下載地址:cc++進制轉換方法匯總(含全部代碼).pdf
| 留言與評論(共有 0 條評論) |