[CODEUP] 1943 进制转换
发布时间:2020-12-14 05:14:03 所属栏目:大数据 来源:网络整理
导读:题目描述 将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。 输入 多组数据,每行为一个长度不超过30位的十进制非负整数。(注意是10进制数字的个数可能有30个,而非30bits的整数) 输出 每行输出对应的二进制数。 样例输入 0 1 3 8 样例输出 0
题目描述将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。 输入多组数据,每行为一个长度不超过30位的十进制非负整数。(注意是10进制数字的个数可能有30个,而非30bits的整数) 输出每行输出对应的二进制数。 样例输入0 样例输出0 IDEA长整数用字符串形式存储,主要解决的问题是字符串如何进行除法和余数。余数不用多说,就是最后一位余2就行。除法则应该按照平时手算除法的顺序进行,比如: for (i = 0; i < len - 1; i++) { s[i+1] += (s[i] % 2) * 10; s[i] /= 2; } 剩下的就是依照平时的整数进制转换的顺序来即可。 SOLUTION#include <stdio.h> #include <string.h> int main() { int i,len,num,sum; char s[100]; char ans[100]; while (scanf("%s",s) != EOF) { len = strlen(s); for (i = 0; i < len; i++) s[i] -= ‘0‘; num = 0; memset(ans,sizeof ans); do { /* sum of each digit */ sum = 0; /* % 2 */ ans[num++] = s[len - 1] % 2 + ‘0‘; /* / 2 */ for (i = 0; i < len - 1; i++) { s[i+1] += (s[i] - ((s[i] >> 1) << 1)) * 10; s[i] >>= 1; sum += s[i]; } s[i] >>= 1; sum += s[i]; } while (sum != 0); while (num--) putchar(ans[num]); putchar(‘n‘); } return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |