进制转换(C++)

【作业描述】
将非负整数n转换成b进制(其中b为2~16)。
用递归和非递归实现。
【代码实现】

#include<iostream>
#include<stdlib.h>
#define N 20
using namespace std;
int fun(int n,int b)
{
	char a;
	int i;
	int k=0;
	if(n==0)   //递归出口 
	return 0;
	else if(n%b>=10) //当余数大于10的时候 
	{
		fun(n/b,b);   //使结果可以正序输出 
		a=n%b+'A'-10;  //ASCII码 
		cout<<a;
	}
	else
	{
		fun(n/b,b);
		a=n%b+'0';
		cout<<a;
	}
}
int main()
{
	int b,n;
	char a[N];
	cout<<"输入要转换的数n:";
	cin>>n;
	cout<<"输入要转换为的进制b:";
	cin>>b;
	cout<<"转换后的数为:";
	fun(n,b);
	system("pause");
	return 0;
}

/*int main()
{
	int b,n,c,i;
	int k=0;
	char a[N];//建立数组储存每一次的计算结果 
	cout<<"输入要转换的数n:";
	cin>>n;
	cout<<"输入要转换为的进制b:";
	cin>>b;
	while(n){
		c=n%b;
		if(c>=10)
		a[k++]=c+'A'-10;
		else
		a[k++]=c+'0';
		n=n/b;
	}
	cout<<"转换后的数为:";
	for(i=k-1;i>=0;i--)	//倒序输出数组里的数 
	cout<<a[i]<<endl;
	system("pause");
	return 0;
}*/
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是C++实现大整数进制转换的示例代码: ```cpp #include <iostream> #include <string> #include <algorithm> using namespace std; // 将字符串表示的数字转换为整数数组 void str2num(string str, int num[], int &len, int &dot_pos, int &dot_len) { len = 0; dot_pos = -1; dot_len = 0; for (int i = 0; i < str.length(); i++) { if (str[i] == '.') { dot_pos = len; } else { num[len++] = str[i] - '0'; } } if (dot_pos != -1) { dot_len = len - dot_pos - 1; } } // 将整数数组转换为字符串表示的数字 string num2str(int num[], int len, int dot_pos, int dot_len) { string str = ""; for (int i = 0; i < len; i++) { str += num[i] + '0'; if (i == dot_pos) { str += '.'; } } if (dot_pos == -1) { str += '.'; } for (int i = 0; i < dot_len; i++) { str += '0'; } return str; } // 将整数数组从from_base进制转换为to_base进制 void base_convert(int num[], int &len, int from_base, int to_base) { int new_num[1000], new_len = 0; while (len > 0) { int r = 0; for (int i = len - 1; i >= 0; i--) { int t = r * from_base + num[i]; num[i] = t / to_base; r = t % to_base; } new_num[new_len++] = r; while (len > 0 && num[len - 1] == 0) { len--; } } for (int i = 0; i < new_len; i++) { num[i] = new_num[new_len - i - 1]; } len = new_len; } int main() { string str; int from_base, to_base; cin >> str >> from_base >> to_base; int num[1000], len, dot_pos, dot_len; str2num(str, num, len, dot_pos, dot_len); // 将整数部分从from_base进制转换为10进制 int int_num[1000], int_len = 0; for (int i = 0; i < dot_pos; i++) { int r = 0; for (int j = int_len - 1; j >= 0; j--) { int t = r * from_base + int_num[j]; int_num[j] = t % 10; r = t / 10; } while (r > 0) { int_num[int_len++] = r % 10; r /= 10; } int_num[int_len++] = num[i]; } reverse(int_num, int_num + int_len); // 将小数部分从from_base进制转换为10进制 int dot_num[1000], dot_len = 0; for (int i = dot_pos + 1; i < len; i++) { int r = 0; for (int j = 0; j < dot_len; j++) { int t = r * from_base + dot_num[j]; dot_num[j] = t % 10; r = t / 10; } while (r > 0) { dot_num[dot_len++] = r % 10; r /= 10; } dot_num[dot_len++] = num[i]; } // 将整数部分和小数部分分别从10进制转换为to_base进制 base_convert(int_num, int_len, 10, to_base); base_convert(dot_num, dot_len, 10, to_base); // 将整数部分和小数部分合并为一个数组 for (int i = 0; i < int_len; i++) { num[i] = int_num[i]; } num[int_len++] = -1; for (int i = 0; i < dot_len; i++) { num[int_len++] = dot_num[i]; } // 将整个数组转换为字符串表示的数字 str = num2str(num, int_len, dot_pos, dot_len); cout << str << endl; return 0; } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值