九度 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得到的方法更好,因为统一。
参考了
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得到的方法更好,因为统一。
相关文章推荐
- 【九度OJ】题目1208:10进制 VS 2进制 解题报告
- 九度OJ 1208:10进制 VS 2进制 (进制转换)
- 九度OJ 1208:10进制 VS 2进制 (进制转换)
- 九度OJ-1208:10进制 VS 2进制
- 九度 题目1208:10进制 VS 2进制
- 题目1208:10进制 VS 2进制
- 题目1208:10进制 VS 2进制
- 九度OJ 题目1208:10进制 VS 2进制
- 【WA】题目1208:10进制 VS 2进制
- 题目1208:10进制 VS 2进制
- 10进制 VS 2进制 (九度oj)
- 10进制 VS 2进制 (九度oj)
- 九度OJ 题目1208:10进制 VS 2进制
- 题目1208:10进制 VS 2进制(进制转换以及大数保存问题)
- 65-题目1208:10进制 VS 2进制
- 题目1208:10进制 VS 2进制
- 九度OJ 1208: 10进制 VS 2进制
- 题目65:10进制 VS 2进制
- 题目65:10进制 VS 2进制
- 清华大学2007年机试-10进制 VS 2进制-1208