您的位置:首页 > 大数据 > 人工智能

杭电 2057 A + B Again

2014-02-07 11:08 281 查看
http://acm.hdu.edu.cn/showproblem.php?pid=2057

开始想偷懒只用16进制输入输出来解决,怎么也没有写出来,后来就把问题划归为进制转换问题,一步一步写了出来。

#include<stdio.h>
#include<string.h>
__int64 fang(int i){
__int64 y = 1;
int j;
for(j = 1;j <= i;j++)
y *= 16;
return y;
}

__int64 change(char s[]){
__int64 x = 0;
int i,len,j = 0;
len = strlen(s);
for(i = len-1;i >= 0;i--)
{
if(s[i] >= '0' && s[i] <= '9')
{
x += (__int64)(s[i]-'0')*fang(j);
j++;
}
else if(s[i] >= 'A' && s[i] <= 'F'){
x += (__int64)(s[i]-'A'+10)*fang(j);
j++;
}
else if(s[i] == '+'){
x = x;
}
else x = -x;
}
return x;
}

void add(__int64 x,__int64 y){
int i = 0,j;
__int64 sum,t;
char s[16];
t = sum = x + y;
if(t == 0) {
printf("0");
}
else{
if(t < 0) sum = -sum;
while(sum){
s[i] = sum%16+'0';
if(s[i] > '9') s[i] = sum%16+55;
sum /= 16;
i++;
}
if(t < 0) printf("-");
for(j = i-1;j >= 0;j--)
printf("%c",s[j]);
}
printf("\n");
}

int main()
{
char s[16],t[16];
int i;
__int64 x,y;
while(scanf("%s%s",s,t) != EOF)
{
x = change(s);
y = change(t);
add(x,y);
}
return 0;
}
感觉自己的解法太弱了,其它简单解法:http://zhidao.baidu.com/link?url=1zAkif-h33Ex286kl-E0YRj-7kZDF2pqZuvlP9f9L7zdCitqOPZ3d8OV8KkLOhMKpFUHeZptT_kVdizyEvPj5q

c++版:http://blog.sina.com.cn/s/blog_69fc13c50100lfoq.htmlhttp://blog.csdn.net/xujinsmile/article/details/7836413怎么感觉用c++都比c简单,下个学期得把c++和c对比再好好学一遍。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  进制问题