一:十六进制转换为十进制
①: 用到了幂次积,也就是转换时先输入一个十六进制的一个字符,判断字符的长度d,最后一位为
pow(16,0)以此递加,第一位为
pow(16,d-1),算出pow之后乘于char的字符的转换。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
char a[15];
long long sum;
int j;
while(scanf("%s",a)!=EOF)
{
sum=0;
int d=strlen(a);
for(j=0;j<d;j++)
{
if(a[j]>='A'&&a[j]<='Z')
sum+=(a[j]-'A'+10)*pow(16,d-1-j);
else
sum+=(a[j]-'0')*pow(16,d-1-j);
}
cout<<sum<<endl;
}
}
②:与十六进制转换十进制一样
if(a[j]>='A'&&a[j]<='Z')
sum=sum*16+a[j]-'A'+10;
else
sum=sum*16+a[j]-'0';
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
char a[15];
long long sum;
int j;
while(scanf("%s",a)!=EOF)
{
sum=0;
int d=strlen(a);
for(j=0;j<d;j++)
{
if(a[j]>='A'&&a[j]<='Z')
sum=sum*16+a[j]-'A'+10;
else
sum=sum*16+a[j]-'0';
}
cout<<sum<<endl;
}
}
二:十进制转换十六进制
没什么好说的 只想说+‘0’与-‘0’的区别大了;
代码如下:
#include<stdio.h>
int main()
{
long long sum=0;
char a[15];
while(scanf("%lld",&sum)!=EOF)
{
long long temp;
int i=0;
if(sum==0)
printf("0\n");
while(sum>0)
{
temp=sum%16;
sum/=16;
if(temp>=10)
{
a[i++]=temp+'A'-10;
}
else a[i++]=temp+'0';
}
for(int j=i-1;j>=0;j--)
printf("%c",a[j]);
printf("\n");
}
return 0;
}
三:10进制转换为吗进制(杭电oj2031题)
Problem Description
输入一个十进制数N,将它转换成R进制数输出。
Input
输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。
Output
为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。
Sample Input
7 2 23 12 -4 3
Sample Output
111 1B -11
代码如下:
打表过的:
#include<stdio.h>
int main()
{
int i,n,r,flag;
char a[1000],b[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
while(scanf("%d%d",&n,&r)!=EOF)
{
flag=1;
if(n<0)
{
flag=-1;
n=-1*n;
}
for(i=0;n;i++)
{
a[i]=b[n%r];
n=n/r;
}
if(flag==-1)
printf("-");
while(i--)
printf("%c",a[i]);
printf("\n");
}
return 0;
}