博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU2106 decimal system
阅读量:5763 次
发布时间:2019-06-18

本文共 1714 字,大约阅读时间需要 5 分钟。

问题链接:。入门训练题,用C语言编写程序。

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

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

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

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

/* HDU2106 decimal system */#include 
#include
#include
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 
#include
// 进制转换:将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;}

转载于:https://www.cnblogs.com/tigerisland/p/7564633.html

你可能感兴趣的文章
PHP随机函数
查看>>
mysql学习笔记二
查看>>
libvirt 启动虚拟机xml配置文件
查看>>
高血压吃什么好?
查看>>
断点命令【Linux学习】GDB调试器基本命令必知必会(一)
查看>>
DataReader和DataSet的区别以及使用
查看>>
十种不靠谱的博客评论方式
查看>>
Sprite Kit编程指南(1)-深入Sprite Kit
查看>>
libev学习之ev_run
查看>>
限制域用户多点登录--脚本
查看>>
Cisco PIX防火墙的安装流程
查看>>
Linux下find用法总结
查看>>
配置系列:ssm中applicationContext-mybatis.xml的简单配置
查看>>
mysql或者mariadb备份脚本
查看>>
chrony
查看>>
extundelete恢复文件
查看>>
PHP取得日期时间差通用函数
查看>>
全球公共云市场规模今年将达2040亿美元
查看>>
深度学习网络大杀器之Dropout(II)——将丢弃学习视为集成学习之我见
查看>>
下一代防火墙是用什么技能“撩妹成功的”?
查看>>