游客 Signup | Login
中文 | En

1284 - C语言12.6

设计一个函数,使得给出一个16位整数的原码,能够得到该数的补码。

Input

一个只包含0和1的16位字符串,表示整数的原码。

Output

输入的整数的补码,用只包含0和1的16位字符串表示。

请注意行尾输出换行。

Examples

Input

1000000000011111

Output

1111111111100001

Solution C

#include <stdio.h>
void main() {
    void complement(char p[], char ret[]);
    char p[20], ret[20];
    scanf("%s", p);
    complement(p, ret);
    printf("%s\n", ret);
}
void complement(char p[], char ret[]) {
    int i, add;
    if (p[0] == '1') {
        ret[0] = '1';
        for (i = 1;i < 16;i++)
            if (p[i] == '1')
                ret[i] = '0';
            else
                ret[i] = '1';
        i = 15;
        add = 1;
        while (add > 0) {
            add = (ret[i] - '0') + add;
            ret[i] = '0' + (add & 1);
            i--;
            add >>= 1;
        }
        ret[16] = '\0';
    } else {
        strcpy(ret, p);
    }
}

Solution C++

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
  char s[20];
  cin>>s;
  for(int i=1;i<strlen(s);i++)
    if(s[i]=='0')s[i]='1';
    else s[i]='0';
    
  for(int i=strlen(s)-1;i>=1;i--)
    if(s[i]=='0'){s[i]='1';break;}
  else s[i]='0';
  cout<<s<<endl;
  return 0;
}
Time Limit 1 second
Memory Limit 32 MB
Discuss Stats
上一题 下一题