http://ac.jobdu.com/problem.php?pid=1138
-
题目描述:
-
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
-
输入:
-
多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)
-
输出:
-
每行输出对应的二进制数。
#include<iostream>
#include<algorithm>
#include<iomanip>
#include<fstream>
using namespace std;
int main()
{
int num[32], length;
char n[32];
ifstream cin("data.txt");
while (cin >> n)
{
for (length = 0; n[length]; length++)
num[length] = n[length] - '0';
int i = 0, j, c, len_res = 0,temp;
char res[200];
while (i < length)
{
res[len_res++] = num[length - 1] % 2 + '0';
//这里是转化为2进制,只用最后一位来除2余数就可以了,其他高位对除2余数不影响,因为从高位借过一位来总是能被2整除,
c = 0;//借位
for (j = i; j < length; j++)
{
temp = num[j];
num[j] = (num[j] + c) / 2;
if (temp & 1) //当这一位是奇数的时候表示不能整除2,要借位了
c = 10;
else
c = 0;
}
if (num[i] == 0)//可能前几次不为0,再循环
i++;
}
for (i = len_res - 1; i >= 0; i--)//逆向输出
cout << res[i];
cout << endl;
}//end of while
system("pause");
return 0;
}
java的BigInteger类实在是很好用,简直就是作弊啊!但是我不会java。。。
AC: 【1138】进制转换
import java.util.*;
import java.math.*;
public class Main {
public static void main(String args[]){
Scanner cin=new Scanner(System.in);
BigInteger a;
while(cin.hasNext()){
a=cin.nextBigInteger();
System.out.println(a.toString(2));
}
}
}
AC: 【1138】进制转换
import java.util.*;
import java.math.*;
public class Main {
public static void main(String args[]){
Scanner cin=new Scanner(System.in);
BigInteger a;
while(cin.hasNext()){
a=cin.nextBigInteger();
System.out.println(a.toString(2));
}
}
}