解题思路:
其实很简单,但仍然想了半天,被自己蠢哭;拿985这个数字做个表格来简单说明一下思路吧:
数字 | /2 | %2 |
---|---|---|
985 | 492 | 1 |
492 | 246 | 0 |
246 | 123 | 0 |
123 | 61 | 1 |
61 | 30 | 1 |
30 | 15 | 0 |
15 | 7 | 1 |
7 | 3 | 1 |
3 | 1 | 1 |
1 | 0 | 1 |
第三列就是需要求得的答案。
#include<cstdio>
#include<cstring>
int main() {
char input[31];
while(scanf("%s",input) != EOF) {
int len = strlen(input);
int output[100];
int k = 0;
int lenOutput = 0;
while(k < len) {
//每次除法后个位数字整除2的值
output[lenOutput++] = (input[len - 1] - '0')%2;
int i = 0;
int c = 0;
//对数字进行除2计算
for(i = k ; i < len; i++) {
int temp = input[i] - '0';
input[i] = (input[i] - '0'+ c)/2 + '0';
//根据高位的奇偶性判断往低一位进的值
if( temp%2 == 0) {
c = 0;
} else if( temp%2 == 1) {
c = 10;
}
}
//如果高位为0.表示运算后的数字位数减少了。个位数字为0时。即表示完成;
if(input[k] == '0') {
k++;
}
}
//输出结果
for(int i = lenOutput - 1; i >= 0; i--) {
printf("%d",output[i]);
}
printf("\n");
}
return 0;
}