http://ayit.acmclub.com/index.php?app=problem_title&id=233&problem_id=21470
让我好蛋疼的一道题,没看清题目,先把十六进制转换成了十进制,然后直接转换成八进制,提交过直接WA,看看题目才看到,十六进制串很长,不用转换成十进制只有用long long 保存,想着直接用字符串来处理,一点思路没有。。。。。。。
看了看别人的代码,才知道,二进制,八进制,十六进制之间有种很微妙的联系,终于解决了。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char s[100010];
int change(int m,int n)
{
int res=0;
for(int i = m; i <= n; i++)
if(s[i]>'9') res = res * 16 + s[i] - 'A' + 10;
else res = res*16 + s[i] -'0';
return res;
}
int main()
{
int n,i,j;
cin>>n;
while(n--)
{
scanf("%s",s);
int len = strlen( s ) ;
int index=0;
bool flag = true;
if(len % 3 == 1)
printf("%o",change(0,0)), flag = false,index = 1;
if(len % 3 == 2)
printf("%o",change(0,1)), flag = false,index = 2;
for(i = index; i < len; i+=3)
{
if(flag)
{
flag = false;
printf("%o",change(i,i+2));
}
else
{
printf("%04o",change(i,i+2));
}
}
cout<<endl;
}
return 0;
}
十进制转换成十六进制,直接用递归:
http://ayit.acmclub.com/index.php?app=problem_title&id=233&problem_id=21516
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char s[100010];
void dfs(long long n)
{
if(n / 16 == 0)
{
if(n>9) printf("%c",n-10 + 65);
else printf("%d",n);
return ;
}
dfs(n / 16);
int m = n % 16;
if(m > 9) printf("%c",m - 10 + 65);
else printf("%d",m);
}
int main()
{
long long n;
while(~scanf("%lld",&n))
{
dfs(n);
cout<<endl;
}
}
十六进制转化成十进制:
http://ayit.acmclub.com/index.php?app=problem_title&id=233&problem_id=21454
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
int prime[10010];
int main()
{
string s;
while(cin>>s)
{
long long sum = 0;
int k = s.size();
//cout<<pow(2,3);
for(int i = k-1; i >= 0; i--)
{
if(s[i]>='A')
sum += (s[i] - 'A' + 10)*pow(16,k-i-1);
else
sum += (s[i] - '0')*pow(16,k - i -1);
}
cout<<sum<<endl;
}
return 0;
}
867

被折叠的 条评论
为什么被折叠?



