HDU2106 decimal system
2016-07-13 22:15
597 查看
问题链接:HDU2106 decimal system。入门训练题,用C语言编写程序。
这个问题是输入的数据进制各不相同要进行求和。
关键是函数atoi()的原理要玩的很熟悉,才能够随心所欲地解决进制有关的问题。
这里给出两种程序,一种是直接对字符串进行处理(使用函数strtok()切分值部分数字串和进制部分字符串),另外一种是暂时将不同进制的数当作10进制数进行处理,然后再转换。
使用函数strtok()的AC程序如下:
进制转换的AC程序如下:
这个问题是输入的数据进制各不相同要进行求和。
关键是函数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; }
相关文章推荐
- 在写junit test 的时候出现的java.lang.UnsupportedClassVersionError问题
- unity, Animation crossfade需要两动画在时间上确实有交叠
- VC编译优化设置
- Python模拟用户自动登陆网易126邮箱
- Viewpager+Tablayout
- HTML文本框文字对齐方式(CSS vertical-align 属性)
- TSP
- [php学习四]AJAX练习1
- Java 集合 集合与数组之间的转换
- sublime 一些常用功能和快捷键
- 『reverse』2016年全国大学生信息安全大赛——珍贵资料解题报告
- Python开发工具
- Win7下安装pip
- frist Django app — 四、 完善View
- 4-9 二叉树的遍历 (25分)
- 多个fragment切换,而不重新加载数据的实现
- Gh0st控制端远程堆溢出
- Spring mvc整合freemarker详解
- 数组中出现次数超过一半的数字
- 自我介绍