进制转换c++

#include<iostream>
#include<iomanip>
#include<vector>
#include<string>
#include<cmath>
using namespace std;

int main()
{
    string s;
    cin >> s;
    vector<char>m;
    for (int i = 0; i < s.length(); i++)
    {
        if (s[i] == '#')
        {
            break;
        }
        m.push_back(s[i]);
    }
    int sum = 0;
    //   cout << m.size();
    for (int i = 0; i < m.size(); i++)
    {
        sum = sum * 2 + int(s[i] - '0');
    }
    cout << sum << endl;
    vector<int>eight;
    int sum3 = sum;
    while (sum3 != 0)
    {
        eight.push_back(sum3 % 8);
        sum3 = sum3 / 8;
    }
    for (int i = 0; i < eight.size(); i++)
    {
        cout << eight[eight.size() - i - 1];
    }
    cout << endl;
	 vector<int>sixteen1;
	    int sum4 = sum;
	    while (sum4 != 0)
	    {
	        sixteen1.push_back(sum4 % 16);
	        sum4 = sum4 / 16;
	    }
	    for (int i = 0; i < sixteen1.size(); i++)
			{
			   // cout << sixteen1[sixteen1.size() - i - 1];
			}
        
	    vector<char>sixteen;
	    for (int i = 0; i < sixteen1.size(); i++)
	    {
	        if (sixteen1[i] >= 0 && sixteen1[i] <= 9)
	        {
	            char pp = char(sixteen1[i]) + '0';
	            sixteen.push_back(pp);
	        }
	        else if (sixteen1[i] >= 10 && sixteen1[i] <= 15)
	        {
	            char pp = char(sixteen1[i] - 10) + 'a';
	            sixteen.push_back(pp);
	        }
	        //            cout << sixteen[sixteen.size() - i - 1];
	    }
	 
	for (int i = 0; i < sixteen.size(); i++)
	{
	    cout << sixteen[sixteen.size() - i - 1];
	}
	cout << endl;
    return 0;
}

  • 0
    点赞
  • 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、付费专栏及课程。

余额充值