从键盘上输入一个n(n∈[2,36])与一个n进制数,将其转换为十进制。
某一数码大于10时,用大写字母 A B C D ... 分别表示 10 11 12 13 ...
例:
(1)输入:2 1101 输出:13
(2)输入:35 ABCDEF 输出:542256555
(3)输入:36 XYZ123 输出:2054125083
代码1:
#include<stdio.h>
#include<string.h>
/*
(1)按位权展开累加
(2)n进制 用字符数组表示 十进制 用unsigned long long
*/
unsigned long long NToD(char s[],int n)
{
unsigned long long sum=0;
int i,len=strlen(s);
char c;
for(i=0;i<len;i++)
{
c=s[i];//'1' 'F'
if(c<='9') sum=sum*n+c-'0';
else sum=sum*n+c-'A'+10;
}
return sum;
}
int main()
{
char sn[80];
unsigned long long d;
int n;
scanf("%d %s",&n,sn);
d=NToD(sn,n);
printf("%llu",d);
return 0;
}
代码2:递归法
#include<stdio.h>
#include<string.h>
/*
(1)按位权展开累加
(2)n进制 用字符数组表示 十进制 用unsigned long long
*/
unsigned long long NToD(char s[],int n)
{
unsigned long long sum=0;
int len=strlen(s);
if(len==0)return 0;
char c=s[len-1];
s[len-1]='\0';
if(c<='9')sum=NToD(s,n)*n+c-'0';
else sum=NToD(s,n)*n+c-'A'+10;
return sum;
}
int main()
{
char sn[80];
unsigned long long d;
int n;
scanf("%d %s",&n,sn);
d=NToD(sn,n);
printf("%llu",d);
return 0;
}