九度OJ-1208-10进制VS二进制
2015-03-19 01:05
155 查看
题目描述:
对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数B,我们乘B为A的二进制逆序数。
例如对于十进制数173,它的二进制形式为10101101,逆序排列得到10110101,其十进制数为181,181即为173的二进制逆序数。
输入:
一个1000位(即10^999)以内的十进制数。
输出:
输入的十进制数的二进制逆序数。
样例输入:
173
样例输出:
181
对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数B,我们乘B为A的二进制逆序数。
例如对于十进制数173,它的二进制形式为10101101,逆序排列得到10110101,其十进制数为181,181即为173的二进制逆序数。
输入:
一个1000位(即10^999)以内的十进制数。
输出:
输入的十进制数的二进制逆序数。
样例输入:
173
样例输出:
181
#include <stdio.h> #include <string.h> #include <stdlib.h> #define TEN 2000 #define TWO 4000 char A[TEN],B[TWO]; int C[TEN]; int divideToBinary(); void multiplyToDecimal(int k); int main() { int k; while(scanf("%s",A)!=EOF) { k=divideToBinary(); multiplyToDecimal(k); } return 0; } int divideToBinary() { int i,k,sum,len,d; memset(B,0,sizeof(B)); sum=1; len =strlen(A); k=0; //转换为2进制 while(sum){ sum=0; for (int i = 0; i < len; ++i) { d=(A[i]-'0')/2; sum+=d; if (i==len-1) { B[k++]=(A[i]-'0')%2+'0'; }else{ A[i+1]+=(A[i]-'0')%2*10; } A[i]=d+'0'; } } B[k]='\0'; //printf("%s\n",B); return k; } /* 这个算法可以避免2^n超过int的表示范围 比如计算1011 0101的十进制数 0*2+1 = 1 1*2+0 = 2 2*2+1 = 5 5*2+1 = 11 11*2+0 = 22 22*2+1 = 45 45*2+0 = 90 90*2+1 = 181 */ void multiplyToDecimal(int k) { int i,j,c,len;//10进制字符串的长度 memset(C,0,sizeof(C));//C[0]-最低位 C[len-1]-最高位 len =1; for (i = 0; i < k; ++i) { for (j = 0; j < len; ++j) { C[j]*=2; } C[0]+=B[i]-'0'; for (j= c = 0; j < len; ++j) { C[j]+=c; if (C[j]>=10) { c=C[j]/10; C[j]%=10; }else{ c=0; } } while(c>0){ C[j++] = c%10; c/=10; } len=j; //printf("i:%d,len:%d,C[0]:%d,C[1]:%d,C[2]:%d\n\n",i,len,C[0],C[1],C[2]); } for (i = len-1; i >= 0; i--) { printf("%d",C[i]); } printf("\n"); }
相关文章推荐
- 九度OJ 1208 十进制vs二进制
- 九度 oj 题目1208:10进制 VS 2进制
- 九度OJ-题目1513:二进制中1的个数
- 【剑指Offer面试题】 九度OJ1513:二进制中1的个数
- 九度OJ-1208:10进制 VS 2进制
- 【九度OJ】题目1208:10进制 VS 2进制 解题报告
- 九度oj 1380 lucky number + 二进制
- 【九度OJ1513】|【剑指offer10】二进制中1的个数
- 九度OJ 1513 二进制中1的个数
- 九度OJ 1208:10进制 VS 2进制 (进制转换)
- 九度OJ 1513 二进制中1的个数
- 九度OJ 1208:10进制 VS 2进制 (进制转换)
- 九度OJ 1471 合并符串
- 九度 OJ 1002 grading
- 九度oj 1048 判断三角形类型
- 【九度OJ】题目1262:Sequence Construction puzzles(I)_构造全递增序列
- CSUOJ 1021 组合数末尾的零 二进制
- 九度OJ 题目1019:简单计算器
- 九度OJ-题目1522:包含min函数的栈
- 特殊的数——九度oj(1402)