C++关于进制转换与特定进制格式输出的问题

目录

一.C++给出的特定进制的转换标识符

二.特定进制格式输出问题

        一  uppercase 十六进制格式字母变大写;

        二  showpos在正数前加正号;

         三  showbase 十六进制前加0x,八进制前加0;

三.C++其他进制的转换方法

 

一.C++给出的特定进制的转换标识符

        十六进制:hex;

        十进制    :dec;

        八进制    :oct;

        用法举例:

        例一  十六进制转十进制、八进制;

#include <iostream>
using namespace std;
int main()
{
	int x = 0x61;
	cout << x << endl;//默认转化为十进制;
	cout << dec << x << endl;//声明转化为十进制;
	cout << oct << x << endl;//声明转化为八进制;
	return 0;
}

运行结果为:

97
97
141

C:\Users\uaer\source\repos\12.25\x64\Debug\12.25.exe (进程 81244)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

 

        例二  十进制转8进制、十六进制;

#include <iostream>
using namespace std;
int main()
{
	int x = 97;
	cout << dec << x << endl;//声明转化为十进制;
	cout << hex << x << endl;//声明转化为八进制;
	return 0;
}

运行结果为: 

97
61

C:\Users\uaer\source\repos\12.25\x64\Debug\12.25.exe (进程 94372)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

二.特定进制格式输出问题

        一  uppercase 十六进制格式字母变大写;

#include <iostream>
using namespace std;
int main()
{
	int x = 0x6fabcd;	
	cout << hex << uppercase << x << endl;
	return 0;
}

运行结果为:

6FABCD

C:\Users\uaer\source\repos\12.25\x64\Debug\12.25.exe (进程 90816)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

        二  showpos在正数前加正号;

#include <iostream>
using namespace std;
int main()
{
	int x = 0xff;	
	cout << showpos << x << endl;
	return 0;
}

运行结果为:

+255

C:\Users\uaer\source\repos\12.25\x64\Debug\12.25.exe (进程 92828)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

         三  showbase 十六进制前加0x,八进制前加0;

#include <iostream>
using namespace std;
int main()
{
	int x = 97;	
	cout << hex << showbase << x << endl;
	cout << oct << showbase << x << endl;
	return 0;
}

运行结果为:

0x61
0141

C:\Users\uaer\source\repos\12.25\x64\Debug\12.25.exe (进程 95684)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

 

三.C++其他进制的转换方法

        核心思路:建立中转站。

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
	int m0, n0;//m0进制转化为n0进制
	cin >> m0 >> n0;
	char m[10001];
	cin >> m;//输入m0进制下的数
	int sum10 = 0;//中转站,转化为10进制数
	for (int i = 0; i < strlen(m); i++)
		sum10 += (m[i] - '0') * pow(m0, strlen(m) - i - 1);
	//cout << sum10;
	int x = -1;
	int n[10001];//10进制数转化为n0进制的数
	while (sum10 != 0)
	{
		x++;
		n[x] = sum10 % n0;
		sum10 /= n0;
	}
	for (int i = x; i >= 0; i--)//所选方法原因,数组需要逆序输出
		cout << n[i];
	return 0;

}

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青山入墨雨如画

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值