zoukankan      html  css  js  c++  java
  • 题解报告:hdu 1229 还是A+B

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1229

    Problem Description

    读入两个小于10000的正整数A和B,计算A+B。需要注意的是:如果A和B的末尾K(不超过8)位数字相同,请直接输出-1。

    Input

    测试输入包含若干测试用例,每个测试用例占一行,格式为"A B K",相邻两数字有一个空格间隔。当A和B同时为0时输入结束,相应的结果不要输出。

    Output

    对每个测试用例输出1行,即A+B的值或者是-1。

    Sample Input

    1 2 1
    11 21 1
    108 8 2
    36 64 3
    0 0 1

    Sample Output

    3
    -1
    -1
    100

    解题思路:这道题的意思就是给你两个数以及K个位数,让你从右往左依次比较,如果K是小于这两个数中最大位数的,依次比较相同则输出-1,不同就计算两个数的和,如果K大于给定有效(最大)位数,则按实际的位数来比较,规则相同,简单AC。

    AC代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int main()
     4 {
     5 
     6     int A,B,K,m,n,h,g,y;
     7     while(cin>>A>>B>>K&&(A+B)){
     8         m=A,n=B,y=K,h=0,g=1;//分别记录输入的三个值,g是来记录两个数中位数最多的一个
     9         while((y--)&&(n||m)){//判断K的同时判断是否超过位数,都为0就没必要再除下去了
    10             if((m%10)==(n%10))++h;//看尾数相同的加1
    11             m/=10,n/=10;//除去尾数
    12             if(m||n)++g;//判断两个数的最大位数,
    13         }
    14         if(K>g)K=g;//保持比较的是有效位数,超过最大位数按实际有效数字来比较
    15         if(h==K)cout<<"-1"<<endl;
    16         else cout<<(A+B)<<endl;
    17     }
    18     return 0;
    19 }
  • 相关阅读:
    记2008年7月25日午后 心情
    [多媒体]词典编码
    [多媒体]算术编码、游程编码
    [多媒体]数据压缩的类型
    [多媒体]理解PCM、DPCM、APCM、ADPCM
    C++异常处理
    [转]linux上SVN解决冲突的办法
    从海量数据查找有或者没有出现的数据
    八数码问题
    [转]linux中强大的screen命令
  • 原文地址:https://www.cnblogs.com/acgoto/p/8472067.html
Copyright © 2011-2022 走看看