您的位置:首页 > 其它

HDU2106 decimal system

2016-07-13 22:15 597 查看
问题链接:HDU2106 decimal system。入门训练题,用C语言编写程序。

这个问题是输入的数据进制各不相同要进行求和。

关键是函数atoi()的原理要玩的很熟悉,才能够随心所欲地解决进制有关的问题。

这里给出两种程序,一种是直接对字符串进行处理(使用函数strtok()切分值部分数字串和进制部分字符串),另外一种是暂时将不同进制的数当作10进制数进行处理,然后再转换。

使用函数strtok()的AC程序如下:

/* HDU2106 decimal system */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
int n, base, val, sum, i;
char s[1024];
char delim[] = "()", *p, *q;

while(scanf("%d", &n) != EOF) {
// 和清零
sum = 0;

// 读入各个数据,进行求和处理
for(i=1; i<=n; i++) {
scanf("%s", s);

// 使用函数strtok将字符串分为两个数字串
p = strtok(s, delim);
q = strtok(NULL, delim);

// 算出进制
base = atoi(q);

// 根据进制base进行atoi计算
val = 0;
while(*p) {
val *= base;
val += *p - '0';
p++;
}

// 累加
sum += val;
}

// 输出结果
printf("%d\n", sum);
}

return 0;
}


进制转换的AC程序如下:

/* HDU2106 decimal system */

#include <stdio.h>
#include <stdlib.h>

// 进制转换:将10进制的val转为base进制的值
int change(int val, int base)
{
int result = 0, weight = 1;
while(val) {
result += (val % 10) * weight;
val /= 10;
weight *= base;
}

return result;
}

int main(void)
{
int n, base, val, sum, i;

while(scanf("%d", &n) != EOF) {
// 和清零
sum = 0;

// 读入各个数据,进行求和处理
for(i=1; i<=n; i++) {
scanf("%d(%d)", &val, &base);

// 累加
if(base == 10)
sum += val;
else
sum += change(val, base);
}

// 输出结果
printf("%d\n", sum);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: