您的位置:首页 > 其它

九度 oj 题目1208:10进制 VS 2进制

2017-01-16 13:38 363 查看
http://ac.jobdu.com/problem.php?pid=1208

参考了

1. http://blog.csdn.net/wzy_1988/article/details/8661593

2. http://blog.csdn.net/lhyer/article/details/48050359

根据参考1有

#include <cstdio>
#include <cstring>
#define MAXN 4000

int main(){
int to[MAXN];
int from[MAXN];
char str[1000];
while(scanf("%s",str) !=EOF ){
int len = (int) strlen(str);
for (int i = 0; i < len; ++i) {
from[i] = str[i] - '0';
}

int toLen = 0;
while(true){
int i = 0;
while(i<len&&from[i] == 0) i++;
if(i==len) break;
int remainder = 0;
for (; i < len; i++) {
int temp = remainder*10+from[i];
from[i] = temp/2;
remainder = temp%2;
}
to[toLen++] = remainder;

}

if(toLen == 0){
printf("0\n");
}else{
int newLen = 1;
memset(from,0,sizeof(from) );
for (int i = 0; i < toLen; ++i) {
for (int j = 0; j< newLen; ++j) {
from[j] *= 2;
}
if(to[i]) from[0]+=to[i];
int c = 0;
for (int j = 0; j < newLen; ++j) {
from[j] += c;
if(from[j] >=10){
c = from[j]/10;
from[j] %=10;
}else{
c = 0;
}
}

while(c){
from[newLen++] = c%10;
c /=10;
}
}
for (int i = newLen-1; i >=0; i--) {
printf("%c",from[i]+'0');
}
printf("\n");
}
}
}


根据参考2有:

#include <cstdio>
#include <cstring>
#define MAXN 4000

int main(){
int to[MAXN];
int from[MAXN];
char str[1000];
while(scanf("%s",str) !=EOF ){
int len = (int) strlen(str);
for (int i = 0; i < len; ++i) {
from[i] = str[i] - '0';
}

int toLen = 0;
while(true){
int i = 0;
while(i<len&&from[i] == 0) i++;
if(i==len) break;
int remainder = 0;
for (; i < len; i++) {
int temp = remainder*10+from[i];
from[i] = temp/2;
remainder = temp%2;
}
to[toLen++] = remainder;

}

if(toLen == 0){
printf("0\n");
}else{
int newLen = 0;
while(true){
int i = 0;
while(i<toLen && to[i] == 0) i++;
if(i == toLen) break;
int remainder = 0;
for(;i<toLen;i++){
int temp = remainder*2 + to[i];
to[i] = temp/10;
remainder = temp%10;
}
from[newLen++] = remainder;
}
for (int i = newLen-1; i >=0; --i) {
printf("%c",from[i]+'0');
}
printf("\n");
}
}
}


我觉得由参考2得到的方法更好,因为统一。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: