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

本文共 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/7564632.html

你可能感兴趣的文章
记一次串口通信调试,慎用SerialPort.Close
查看>>
Struts2自己定义拦截器实例—登陆权限验证
查看>>
windows 下FFMPEG的编译方法 附2012-9-19发布的FFMPEG编译好的SDK下载
查看>>
Java检查型异常和非检查型异常
查看>>
Android中如何像 360 一样优雅的杀死后台服务而不启动
查看>>
不管多少个空格替换为一个空格
查看>>
Android-用webservice连接sqlserver数据库
查看>>
单链表
查看>>
JSF简单介绍
查看>>
WebSocket初探
查看>>
hdu 4784 Dinner Coming Soon(spfa + 优先队列)
查看>>
IOS8 通知中心(Notification Center)新特性
查看>>
用C++设计一个不能被继承的类
查看>>
poj 3009 Curling 2.0 (dfs )
查看>>
DPI和像素
查看>>
php $_SERVER['HTTP_USER_AGENT']
查看>>
MinGW 介绍
查看>>
MATLAB中导入数据:importdata函数
查看>>
bsearch的溢出问题
查看>>
在windows server2003下安装Redmine
查看>>