codeup 进制转换(二)

题目描述

将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。

输入

多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)

输出

每行输出对应的二进制数。

样例输入 Copy

985
211
1126

样例输出 Copy

1111011001
11010011
10001100110

解题思路:完全是模拟手动计算的过程,只不过在计算余数时,判断最后一个数字是否为偶数(若是偶数,则余数为0,是奇数,则余数为1)(转换其他进制不可以这样计算)。

代码如下:输入的字符串转换为int数组,是为了方便计算,而且当某一个字符 == 0(数字0,不是字符0)时,此时该字符相当于'\0',使得strlen()函数出错。

#include<bits/stdc++.h>
using namespace std;
int main(){
	char num[40];
	while(scanf("%s",&num) != EOF){
		int input[40] = {0};
		for(int i = 0; i < strlen(num); i++){
			input[i] = num[i] - 48;
		}
		int output[100000] = {0};
		int in_index = 0;
		int out_index = 0;
		while(in_index != strlen(num)){
			if(input[strlen(num) - 1] % 2 == 0){
				output[out_index++] = 0;
			}else{
				output[out_index++] = 1;
			}
//			printf("out = %d\n",output[out_index - 1]);
			int temp = 0;
			for(int i = in_index; i < strlen(num); i++){
				temp = temp * 10 + input[i];
				input[i] = temp / 2;
				temp %= 2;
//				printf("input[%d] = %d ",i,input[i]);
			}
//			printf("\nlen = %d\n",strlen(num));
			if(input[in_index] == 0){
					in_index++;
			}
		}
		for(int i = out_index - 1; i >= 0; i--){
			printf("%d",output[i]);
		}
		printf("\n");
	}
}
发布了18 篇原创文章 · 获赞 1 · 访问量 994

猜你喜欢

转载自blog.csdn.net/qq_38969094/article/details/104203601