进制转换

题型1:十进制转其他进制

题目:

https://www.acwing.com/problem/content/3376/

题目描述:

将一个长度最多为 30位数字的十进制非负整数转换为二进制数输出。

输入格式
输入包含多组测试数据。每组测试数据占一行,包含一个长度不超过 30位的十进制非负整数。

输出格式
每组数据输出一个结果,占一行,为输入对应的二进制数。

数据范围

输入最多包含 100组测试数据。

输入样例:
0
1
3
8
输出样例:
0
1
11
1000

题目分析:

包含一个长度不超过 30位的十进制非负整数——>使用高精度(用字符串存储)

其完整代码:

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>

using namespace std;

vector<int> div(vector<int> &A, int b) //高精度除法
{
vector<int> C;

for (int i = A.size() - 1 , r = 0; i >= 0; i -- ) //i = A.size()-1 ,A[i]表示该数(真实数)的最高位数到最低数
{ // 除法从最高位开始计算
r = r * 10 + A[i];
C.push_back(r / b);
r %= b; //更新余数
}
reverse(C.begin(), C.end());
while (C.size() && C.back() == 0) C.pop_back();
return C;
}

int main()
{
string s;
while(cin>>s)
{
vector<int> A;
for(int i = 0;i<s.size();i++)
A.push_back(s[s.size()-i-1]-'0');//倒着存

string res;
if(s=="0")res ="0"; //判断特例
else
{
while (A.size())
{
res += to_string(A[0] % 2); //A[0]表示s数的个位数
A = div(A, 2); //除2
}
}
reverse(res.begin(),res.end());
cout<<res<<endl;
}
return 0;

}

代码举例分析:

 

 

 
posted @ 2023-01-26 14:32  探す  阅读(108)  评论(0)    收藏  举报