注册 登录
编程论坛 C语言论坛

C语言函数定义实现任意进制转任意进制

A154294 发布于 2020-01-03 09:57, 2075 次点击
利用函数定义写出任意进制转任意进制,想了两天还是只能写出十进制转任意进制,求大神解答,
输出结果如下:
    请输入要转换的数的进制:(2-16)
    请输入数字:
    需要转换成几进制数:(2-16)
    转换结果为:
3 回复
#2
xianfajushi2020-01-03 19:35
知其然知其所以然,只要了解进制之间转换的道理,就可以用函数实现。
#3
xianfajushi2020-01-03 19:38
进制间互换摆渡即可得其道理
#4
自学的数学2020-01-04 15:11
程序代码:
#include<iostream>   
#include<math.h>   
#include<string.h>  
using namespace std;   
int main()   
//任意进制转换为10进制  
{  char q[100];//定义q为字符串保存原数  
   long n=0;//定义转换成的十进制数为n  
   int i,l,r=0,p,c,m=0,s[100];  
//i为原进制数,l为字符串长度,r为次方数,p为转换后的任意进制数,c为余数,m,l用于计数,s存入转换后的数组  
   cout<<"输入要转化的数:"<<endl;  
   cin>>q;  
   cout<<"输入原数进制:"<<endl;  
   cin>>i;  
   cout<<"转换后的进制:"<<endl;  
   cin>>p;  
   l=strlen(q);  
   strupr(q);//把字符串中字母全部大写,方便下一步计算  
//将任意进制数转化为十进制数  
   for(l=l-1;l>=0;l--)  
      {if(q[l]<='9')n=n+(q[l]-48)*pow(i,r++);  
          else n=n+(q[l]-55)*pow(i,r++);}  
//十进制转换为任意进制  
   while(n!=0)//数制转换,结果存入数组s[m]   
   {  c=n%p;   
      n=n/p;   
      m++;  
      s[m]=c;   //将余数按顺序存入数组s[m]中     
    }      
   for(int k=m;k>=1;k--)//输出转换后的序列   
      {   
         if(s[k]>=10) //若为十六进制等则输出相对应的字母   
            cout<<(char)(s[k]+55);   
         else         //否则直接输出数字   
            cout<<s[k];  
      }   
   cout<<endl;  
   return 0;
   }
1