saeedsmk
مدیر بازنشسته
- تاریخ عضویت
- 6 سپتامبر 2003
- نوشتهها
- 1,518
- لایکها
- 4
کد:
#include <stdio.h>
#include <iostream.h>
#include <conio.h>
char I2C(int i);
int C2I(char a);
int str2num(char *p,int mab);
void getstr(char *p,int mab);
void msg();
void main(){
int num_org,num,i,j,k,b,r,mab_sec,mab_org;
char num_str[100];
char tem_str[100];
char a;
clrscr();
//get org num base mode
cout<<"Please enter Number base mode:(10) ( 2>,<16 ):";
getstr(&tem_str[0],10);
if (tem_str[0]!='\0')
mab_org=str2num(&tem_str[0],10);
else
mab_org=10;
if (mab_org<2 || mab_org>16) {msg();return;}
//get org num base mode
cout<<"Now. Please enter Number :";
getstr(&num_str[0],mab_org);
if (num_str[0]=='\0') {msg();return;}
num_org=str2num(&num_str[0],mab_org);
//get output base mode
cout<<"Please enter output base mode (10) ( 2>,<16 ):";
getstr(&tem_str[0],10);
if (tem_str[0]!='\0')
mab_sec=str2num(&tem_str[0],10);
else
mab_sec=10;
if (mab_sec<2 || mab_sec>16) {msg();return;}
// start calculating
num=num_org;
i=0;
for (;num>=mab_sec;){
num/=mab_sec;
i++;}
cout<<I2C(num);
for(j=i;j>0;j--){
num=num_org;
for(k=0;k<j;k++){
b=num%mab_sec;
num/=mab_sec;
}
cout<<I2C(b);
}
getch();
}
char I2C(int i){
char a;
i+=0x30;
if (i>0x39) i+=7;
a=i;
return a;
}
int C2I(char a){
int i;
i=a;
i-=0x30;
if (i>16) i-=7;
if (i>16) i-=32;
return i;
}
int str2num(char *p,int mab){
int numr=0;
for( int i=0 ;*(p+i)!='\0';i++){
numr=numr*mab+C2I(*(p+i));
}
return numr;
}
void getstr(char *p,int mab){
char a;
int sec1=0,sec2=0,sec3=0;
do {
a=getche();
if (mab<=10){
sec1=(a>47 && a<48+mab);
}else{
sec2=(a>64 && a<65+(mab-10));
sec3=(a>96 && a<97+(mab-10));
}
if ( sec1 || sec2 || sec3 )
*(p++)=a;
}while (a!=13);
*p='\0';
cout<<endl;
}
void msg(){
cout<<endl<<" ** Error *****************************************";
cout<<endl<<" * Can not accept the number you entered! *";
cout<<endl<<" ****************************************************"<<endl;
cout<<endl<<"Press any key to continue..."<<endl;
getch();
}