gpt4 book ai didi

c++ - 从十进制转换为 Base R c++

转载 作者:太空宇宙 更新时间:2023-11-04 13:04:43 27 4
gpt4 key购买 nike

提前感谢您的帮助。

我得到了一项接受以下输入的作业:

init_base which is the base we are converting to. 2<=init_base and 36>= init_base
in_num which is the decimal number that is to be converted
in_num gets written to multiple times for each decimal number
the input is terminated with a -1

我被告知当数字大于 9 时使用大写字母。

我已经为解决方案编写了代码。代码运行但我不断得到奇怪的输出。我不确定这是为什么。我认为这与我的数据类型转换有关。但是我不太确定出了什么问题。

#include <iostream>
#include <cmath>
#include <string>
#include <stdlib.h>
#include <algorithm>

using namespace std;
string ans;
int counter = 0;
bool Alpha_check(int val){
if(val>9){
return true;
}
else{
return false;
}
}
char Al_conv(int val){
if(Alpha_check(val)){
return char(val+55);
}
else {
return char((val-48)+'0');
}
}
void add_On(int c){
ans.append(Al_conv(c));
counter++;
}

int div_loop(int num, int base){
int temp = int(num/base);
int temp2 = int(num%base);
add_On(temp2);
return temp;
}

void add_line(int number){
ans[number] = '\n';
}

int main(){
int init_base, in_num = 0;
cin >> init_base;
cin >> in_num;
do{
string rem;
int init_count = counter;
while(in_num!=0){
in_num = div_loop(in_num,init_base);
}
int helper = int(floor((counter-init_count)/2));
for(int y = 0; y < helper; y++){
int temp = ans[y+init_count];
ans[y+init_count] = ans[(counter-1)-y];
ans[(counter-1)-y] = temp;
}
add_line(counter);
counter++;
cin >> in_num;
}while(in_num!=-1);
ans[counter] = '\0';
for(int gh = 0; gh < ans.length(); gh++){
cout << ans[gh];
}
cout << endl;


return 0;
}

这里还有一个链接供你关注http://ideone.com/qFOtyl检查输出。

最佳答案

将问题分成两部分,解决方案很简单。第一部分,使用基数和模运算符将输入数字拆分为数字。然后,将它们转换成适合输出的字符。

///Given a maximum base of 36, the input of this function is in the range [0..35]
char toAlphaNumericSingleDigit(int input) {
if (input < 10) {
return '0' + input;
} else {
return 'A' + (input - 10);
}
}

void print_conversion(int input, int base) {
while (input > 0) {
std::cout << toAlphaNumericSingleDigit(input % base);
input /= base; ///Proceeds to the next digit
}
std::cout << std::endl;
}

请注意,这将以相反的顺序打印输出字符,从最不重要到最重要。

测试:

int main() {
print_conversion(1294,36);
return 0;
}

打印:

YZ

关于c++ - 从十进制转换为 Base R c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42928504/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com