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;
    }


  • 相关阅读:
    redis的坑
    引入easyui的404问题
    添加 @ResponseBody出现错误的问题
    星期,时间
    activiti的坑
    使用shiro遇到的问题
    IS应用程序池的查看与配置【转载】
    JS判断值是否是数字
    如何在EJS中将变量呈现为HTML?
    My97DatePicker日期控件的下载及使用方法
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564633.html
Copyright © 2011-2022 走看看