Написать рекурсивную процедуру, переводящую числа из одной системы счисления в другую. (Язык C++)
Answers & Comments
srzontmp
#include <iostream> #include <iomanip> using namespace std;
// перевод из основания frm в основание 10 void snd(int frm,int* n,char s[]) { int m,p; m=strlen(s); if (m>0) { if (s[m-1]<58) p=s[m-1]-48; else p=s[m-1]-'a'+10; s[m-1]=0; snd(frm,n,s); } else p=0; *n=*n*frm+p; }
// перевод числа n из основания 10 в to void dsn(int* n,int to,char s[]) { static int k=0; int m; m=*n%to; *n/=to; k++; if (*n>0) dsn(n,to,s); else { s[k]=0; k=0; } if (m<10) s[k]=m+48; else s[k]=m+'a'-10; k++; }
int main() { int osns,osnd; int n=0; char s[30]; cout<<"from osn: "; cin>>osns; cout<<"number: "; cin>>s; cout<<"to osn: "; cin>>osnd; snd(osns,&n,s); dsn(&n,osnd,s); cout<<s<<endl; system("pause"); return 0; }
Answers & Comments
#include <iomanip>
using namespace std;
// перевод из основания frm в основание 10
void snd(int frm,int* n,char s[]) {
int m,p;
m=strlen(s);
if (m>0) {
if (s[m-1]<58) p=s[m-1]-48;
else p=s[m-1]-'a'+10;
s[m-1]=0; snd(frm,n,s);
}
else p=0;
*n=*n*frm+p;
}
// перевод числа n из основания 10 в to
void dsn(int* n,int to,char s[]) {
static int k=0;
int m;
m=*n%to; *n/=to; k++;
if (*n>0) dsn(n,to,s);
else { s[k]=0; k=0; }
if (m<10) s[k]=m+48;
else s[k]=m+'a'-10;
k++;
}
int main() {
int osns,osnd;
int n=0;
char s[30];
cout<<"from osn: "; cin>>osns;
cout<<"number: "; cin>>s;
cout<<"to osn: "; cin>>osnd;
snd(osns,&n,s);
dsn(&n,osnd,s);
cout<<s<<endl;
system("pause");
return 0;
}
from osn: 5
number: 13211
to osn: 16
420
from osn: 16
number: 2f3de
no osn: 6
4051502