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