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 }
  • 相关阅读:
    java 线程开启 中断
    手写迷你版hashmap
    基于状态机的乐观锁
    Python清空指定文件夹下所有文件的方法
    Python
    python+selenium配置Edge浏览器
    python+selenium怎么获取ul下面最后一个li或ul中有多少个li
    Python Selenium 笔记
    XPath定位时,使用文本的方法小技巧。
    python yield返回多个值
  • 原文地址:https://www.cnblogs.com/wally/p/2969930.html
Copyright © 2011-2022 走看看