zoukankan      html  css  js  c++  java
  • HDU2106 decimal system

    问题链接: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
    ", 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
    ", sum);
        }
    
        return 0;
    }


  • 相关阅读:
    excel使用总结
    使用spring的@Scheduled注解执行定时任务,启动项目不输出警告
    web.xml配置错误导致applicationContext.xml配置重复加载
    POI3.8解决导出大数据量excel文件时内存溢出的问题
    linux常用命令总结
    javax.mail 发送邮件异常
    eclipse下创建maven项目
    java单例模式的几种写法比较
    msql数据迁移,myisam及innoDB
    JS监听回车事件
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564633.html
Copyright © 2011-2022 走看看