用c语言写一个程序:进制转换
#includeiostream
#includestring.h
using namespace std;
void change(char num[],int a,int b);
int main()
{
int a,b;
char con,num[100000]={};
start:
cout”————————————————————“endl;
cout”—–本程序可将任意进制的高精度整数或小数转换成任意进制—–“endl;
cout”——–注意:进制数不可超过36,不过我相信你也用洞蔽不到——–“endl;
cout”———–若发现存在计算错误,请及时向纳桐州程序员报告———–“endl;
cout”————————————————————“endl;
cout”请输入该数字:”endl;
cinnum;
cout”请输入此数字原本的进轮判制数:”endl;
cina;
cout”请输入要转换成的进制数:”endl;
cinb;
change(num,a,b);
cout”继续?Y/N”endl;
cincon;
if(con==’Y’||con==’y’)
{
system(“CLS”);
goto start;
}
return 0;
}
void change(char num[],int a,int b)
{
int cnt=0,temp=0,temp1,i,j,ret[100000]={},len=strlen(num),point;
double temp2=0,temp3;
point=len;
for(i=0;ilen;i++)
{
if(num[i]==’.’)
{
point=i;
continue;
}
if(num[i]’0′)
{
cout”输入数据错误”endl;
return;
}
else
{
if(num[i]’9′)
{
if(a=10||num[i]’A’)
{
cout”输入数据错误”endl;
return;
}
else
if(num[i]a-10+’A’)
{
cout”输入数据错误”endl;
return;
}
}
}
if(num[i]=’9′)
num[i]-=’0′;
else
num[i]=num[i]-‘A’+10;
}
if(point==1num[0]==0)
cout0;
else
{
for(i=0;ipoint;i++)
{
temp1=num[i];
for(j=i;jpoint-1;j++)
temp1*=a;
temp+=temp1;
}
while(temp)
{
ret[cnt]=temp%b;
temp=temp/b;
cnt++;
}
for(i=cnt-1;i=0;i–)
coutret[i];
}
if(point==len)
{
coutendl;
return;
}
else
{
cout’.’;
for(i=point+1;ilen;i++)
{
temp3=num[i];
for(j=point;ji;j++)
temp3=temp3/a;
temp2+=temp3;
}
for(i=0;i72;i++)
{
temp2*=b;
temp=temp2;
if(temp10)
couttemp;
else
cout(char)(temp-10+’A’);
temp2-=temp;
}
coutendl”(由于技术原因,本数据可能出现误差,如果涉及到重大事件则最好手算)” endl;
}
}
拿着玩去吧……