1284 - C语言12.6

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB

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

题目输入

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

题目输出

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

请注意行尾输出换行。

输入/输出样例

输入格式

1000000000011111

输出格式

1111111111100001

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);
    }
}

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;
}

Java解答

import java.util.Scanner;
public class Main {
	public static void main(String[] args){
		Scanner cin=new Scanner(System.in);
		String s=cin.nextLine();
		cin.close();
		if(s.substring(0,1)=="0")
			System.out.println(s);
		else{
		int a=Integer.parseInt(s,2);
		int sum=1;
		while(sum<a)
			sum*=2;
		sum/=2;
		a-=sum;
		a=~a;
		a+=sum;
		a++;
		System.out.println("1"+Integer.toBinaryString(a));
		}
	}
}