这是一个数制转换程序,还差把输出字符串逆序,请问如果是你怎样补充呢?
我现在写的dec_other函数只是实现了答案的逆序,我想在这个函数中的rev_num直接倒过来输出,如何实现?
#include<iostream>
#include<math.h>
#include<assert.h>
using namespace std;
int ch_num(char ch)//字符转换成数字
{
int num;
if(ch>='0'&&ch<='9')
num=ch-'0';
if(ch>='A'&&ch<='F')
num=ch-'A'+10;
if(ch>='a'&&ch<='f')
num=ch-'a'+10;
return num;
}
char num_ch(int num)//数字转换成字符
{
char ch;
if (num>=0&&num<=9)
ch=(char)(num+'0');
if(num>=10&&num<=15)
ch=(char)(num+'A'-10);
return ch;
}
int other_dec(char *num,int font)//其他数制转化成十进制
{
assert(num!=NULL);
int sum=0,len=0,t=0;
char *p=num;
for(;*num!='\0';num++)
len++;
int i=len-1;
for(;i>=0;i--,p++)
{ t=ch_num(*p);
sum=sum+t*pow(font,i);
}
return sum;
}
char *dec_other(int num,int back,char *rev_num)//十进制转化其他数制,这时的rev_num是答案的逆序,我想在这个函数中直接倒过来输出,如何实现?
{
assert(rev_num!=NULL);
char *p=rev_num;
int tp=0,tp1=num;
for(int i=0;tp1>0;rev_num++,i++)
{
tp=tp1%back;//余数
tp1=tp1/back;//商
*rev_num=num_ch(tp);
}
*rev_num='\0';
return p;
}
int len_ch(char *rev_num)//计算字符串的长度
{
int len=0;
for(;*rev_num!='\0';len++,rev_num++);
return len;
}
int main()
{
bool flag=1;//=1表示继续,=0表示不继续
char num[20],rev_num[20];
int font,back;
do
{
cout<<"转换前的数是:";
cin>>num;
cout<<"转换前的数制是:";
cin>>font;
cout<<"转换后的数制是:";
cin>>back;
cout<<"转换后的数是:";
if(font!=back)
{
if(back==10)
cout<<other_dec(num,font)<<endl;
else
{
int temp=other_dec(num,font);
char *p=dec_other(temp,back,rev_num);
cout<<rev_num<<endl;
}
}else
cout<<num<<endl;
cout<<"继续请输入1,否则输入0:";
cin>>flag;
}while(flag);
return(0);
}
#include<iostream>
#include<math.h>
#include<assert.h>
using namespace std;
int ch_num(char ch)//字符转换成数字
{
int num;
if(ch>='0'&&ch<='9')
num=ch-'0';
if(ch>='A'&&ch<='F')
num=ch-'A'+10;
if(ch>='a'&&ch<='f')
num=ch-'a'+10;
return num;
}
char num_ch(int num)//数字转换成字符
{
char ch;
if (num>=0&&num<=9)
ch=(char)(num+'0');
if(num>=10&&num<=15)
ch=(char)(num+'A'-10);
return ch;
}
int other_dec(char *num,int font)//其他数制转化成十进制
{
assert(num!=NULL);
int sum=0,len=0,t=0;
char *p=num;
for(;*num!='\0';num++)
len++;
int i=len-1;
for(;i>=0;i--,p++)
{ t=ch_num(*p);
sum=sum+t*pow(font,i);
}
return sum;
}
char *dec_other(int num,int back,char *rev_num)//十进制转化其他数制,这时的rev_num是答案的逆序,我想在这个函数中直接倒过来输出,如何实现?
{
assert(rev_num!=NULL);
char *p=rev_num;
int tp=0,tp1=num;
for(int i=0;tp1>0;rev_num++,i++)
{
tp=tp1%back;//余数
tp1=tp1/back;//商
*rev_num=num_ch(tp);
}
*rev_num='\0';
return p;
}
int len_ch(char *rev_num)//计算字符串的长度
{
int len=0;
for(;*rev_num!='\0';len++,rev_num++);
return len;
}
int main()
{
bool flag=1;//=1表示继续,=0表示不继续
char num[20],rev_num[20];
int font,back;
do
{
cout<<"转换前的数是:";
cin>>num;
cout<<"转换前的数制是:";
cin>>font;
cout<<"转换后的数制是:";
cin>>back;
cout<<"转换后的数是:";
if(font!=back)
{
if(back==10)
cout<<other_dec(num,font)<<endl;
else
{
int temp=other_dec(num,font);
char *p=dec_other(temp,back,rev_num);
cout<<rev_num<<endl;
}
}else
cout<<num<<endl;
cout<<"继续请输入1,否则输入0:";
cin>>flag;
}while(flag);
return(0);
}
正在回答 回答被采纳积分+1
首先在开头导入头文件
#include<algorithm>
然后在int main()主函数中判断是哪一进制,输出转换后的数字的时候,通过如下代码实现:
int otherNum = other_dec(num,font); string otherStr = to_string (otherNum); reverse(otherStr.begin(), otherStr.end()); cout<< otherStr <<endl;
其中reverse()是字符串逆序的函数,先把结果数字通过to_string函数转换成字符串,然后在通过reverse函数逆序字符串,最终输出结果。else里的实现思路也可以根据上述代码进行改编。如果还有什么不明白的地方,可以在问答里进行提问,助教都会帮助解决。祝学习愉快~
- 参与学习 529 人
- 提交作业 110 份
- 解答问题 594 个
无论您是零基础、还是想晋升,亦或是想转型,C++无疑都是最佳选择。本路径共分为基础语法、指针与引用、面向对象三大模块,为你开启入门C++编程的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星