zoukankan      html  css  js  c++  java
  • hdu 2116(判断是否溢出)

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

    题目大意就是给你两个k位数,然后相加,判断是否溢出。

    思路:如果一正一负,那肯定不会溢出,其他情况就都转化为二进制来做,只要判断最后结果的位数就行了。

    View Code
     1 #include<iostream>
     2 #include<string>
     3 #include<algorithm>
     4 using namespace std;
     5 
     6 int main(){
     7     int k;
     8     while(~scanf("%d",&k)){
     9         __int64 n,m;
    10         scanf("%I64d%I64d",&n,&m);
    11         if((n<0&&m>=0)||(n>=0&&m<0)){
    12             printf("WaHaHa\n");
    13             continue;
    14         }
    15         int tag=0;
    16         if(n<=0&&m<=0){
    17             n=-1*n;
    18             m=-1*m;
    19             tag=1;
    20         }
    21         string s1="",s2="",s3="";
    22         int i,j,c=0,l=0;
    23         while(n){
    24             s1+=n%2+'0';
    25             n/=2;
    26         }
    27         while(m){
    28             s2+=m%2+'0';
    29             m/=2;
    30         }
    31         for(i=0,j=0;i<s1.size()&&j<s2.size();i++,j++){
    32             l=(c+(s1[i]-'0'+s2[j]-'0'))%2;
    33             s3+=l+'0';
    34             c=(c+s1[i]-'0'+s2[j]-'0')/2;
    35         }
    36         while(i<s1.size()){
    37             l=(c+(s1[i]-'0'))%2;
    38             s3+=l+'0';
    39             c=(c+s1[i++]-'0')/2;
    40         }
    41         while(j<s2.size()){
    42             l=(c+(s2[j]-'0'))%2;
    43             s3+=l+'0';
    44             c=(c+s2[j++]-'0')/2;
    45         }
    46         if(c)s3+=c+'0';
    47         reverse(s3.begin(),s3.end());
    48         if(tag&&s3.size()==k){
    49             //如果都是负数的话,当相加刚好位k位时,那么最小是最高位为1,其余都是0,否则就会溢出;
    50             //比如(-15)+(-1)=10000,此时k为5,表示-16.
    51             for(i=1;i<s3.size();i++){
    52                 if(s3[i]=='1'){
    53                     printf("Yes\n");
    54                     break;
    55                 }
    56             }
    57             if(i==s3.size())printf("WaHaHa\n");
    58         }else if(s3.size()+1<=k){
    59             printf("WaHaHa\n");
    60         }else 
    61             printf("Yes\n");
    62     }
    63     return 0;
    64 }
  • 相关阅读:
    书单
    将博客搬至CSDN
    《当我谈跑步时,我谈些什么》读后笔记
    jQuery EasyUI 教程-Tabs(选项卡)
    jqGrid中的formatter
    jqGrid中的编辑
    struts2中action接收参数的方法
    Hibernate基础(4):基础配置@Table@Column@Temporal@Transient@Enumerated
    Hibernate @Temporal
    搭建python项目
  • 原文地址:https://www.cnblogs.com/wally/p/2969930.html
Copyright © 2011-2022 走看看