牛客练习赛48 A· 小w的a+b问题
链接:https://ac.nowcoder.com/acm/contest/923/A来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
Special Judge, 64bit IO Format: %lld
题目描述
大家一定都做过各大oj上面不同版本的A+B problem,如果现在反过来给你c,请你给我输出一组a和b,使得a+b的和等于c呢?
这同样还是一个简单的问题。
我们假设某种语言中的32位整形被定义成int 类型,该语言中负整数以二进制补码的形式储存,第32位为符号位,前31位为数值位。例如-1就被存储为"1111 1111 1111 1111 1111 1111 1111 1111",-8则被储存为"1111 1111 1111 1111 1111 1111 1111 1000",特别的,32位整形所能表示的最大负数-2147483648则被储存为"1000 0000 0000 0000 0000 0000 0000 0000"。
计算机在做加法运算时,实际上执行的是补码的加法运算,在计算的过程中如果数字溢出到不存在的第33位,那么这个溢出的位就不要了。
现在给你一个32位的负整形c。即c∈[−2147483648,−1]c\in [-2147483648,-1]c∈[−2147483648,−1]。
请你给我两个32位的正整形a,b即a,b∈[1,2147483647]a,b\in [1,2147483647]a,b∈[1,2147483647]。使得a+b=c。
如果不存在这样的a和b的话,请输出一个字符串"No solution"。否则请输出任意两个正整形a,b满足a+b=c。两个整数之间用一个空格隔开。
输入描述:
仅一行一个32位负整形c,(−2147483648⩽c⩽−1)(-2147483648\leqslant c\leqslant -1)(−2147483648⩽c⩽−1)
输出描述:
如果存在两个32位正整形a,b使得a+b=c成立,则输出这两个正整形。反之请输出一个字符串"No solution"。(不含引号)
示例1
输入
[复制](javascript:void(0)