ny 244(进制转换)
2013-09-03 13:04
141 查看
几个进制之间的转换,需要注意的是,8进制中竟然没有负数,取个绝对值就过了。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cctype>
using namespace std;
char s[20];
int main()
{
int t,lens,c,sum2,i,sum1,sun,z;
cin>>t;
while (t--)
{
cin>>s;
lens=strlen(s);
c=0;
sun=1;
sum1=0;sum2=0;
for ( i=lens-1;i>=0;i--)
{
if (s[i]=='+')
{
c=1;
break;
}
if (s[i]=='-')
{
c=2;
break;
}
if (isdigit(s[i]))
sum1+=(s[i]-'0')*sun;
else
{
z=s[i]-'a'+10;
sum1+=z*sun;
}
sun*=16;
}
sun=1;i--;
for ( ;i>=0;i--)
{
if (isdigit(s[i]))
sum2+=(s[i]-'0')*sun;
else
{
z=s[i]-'a'+10;
sum2+=z*sun;
}
sun*=16;
}
;
if (c==1)
sum1+=sum2;
else sum1-=sum2;
if (sum1<0)
{
sum1=-sum1;
}
printf("%o\n",sum1);
}
return 0;
}
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cctype>
using namespace std;
char s[20];
int main()
{
int t,lens,c,sum2,i,sum1,sun,z;
cin>>t;
while (t--)
{
cin>>s;
lens=strlen(s);
c=0;
sun=1;
sum1=0;sum2=0;
for ( i=lens-1;i>=0;i--)
{
if (s[i]=='+')
{
c=1;
break;
}
if (s[i]=='-')
{
c=2;
break;
}
if (isdigit(s[i]))
sum1+=(s[i]-'0')*sun;
else
{
z=s[i]-'a'+10;
sum1+=z*sun;
}
sun*=16;
}
sun=1;i--;
for ( ;i>=0;i--)
{
if (isdigit(s[i]))
sum2+=(s[i]-'0')*sun;
else
{
z=s[i]-'a'+10;
sum2+=z*sun;
}
sun*=16;
}
;
if (c==1)
sum1+=sum2;
else sum1-=sum2;
if (sum1<0)
{
sum1=-sum1;
}
printf("%o\n",sum1);
}
return 0;
}