要求输出最多有30位的十进制数的二进制表示。
10的30次方大概是2的100次方,最大的long long int最多也只能表示到2的64次方,所以用字符串来存这个数,然后通过遍历字符串的方式来模仿整数除法。
#include <cstdio>
#include <iostream>
#include <string.h>
using namespace std;
char sp[100];
int res[100];
int n,length;
bool isAllZero(char* str)
{
for(int i=0;i<length;i++)
{
if((int)str[i]!=0)
{
return false;
}
}
return true;
}
int main()
{
scanf("%s",sp);
length = strlen(sp);
//下面把ascii码值转换成整数值 十进制0对应ascii码的48
for(int i=0;i<length;i++)
{
sp[i] -= 48;
}
if(isAllZero(sp)) cout<<"0"<<endl;
int counter = 0;
//循环直到数组里所有数都为0
while(!isAllZero(sp))
{
int pre = 0;
for(int i=0;i<length;i++)
{
//除2取余
int temp = (sp[i]+pre*10)/2;
pre = (sp[i]+pre*10)%2;
sp[i] = temp;
}
res[counter]=pre;
counter++;
}
cout<<"counter is "<<counter<<endl;
for(int i=counter-1;i>=0;i--)
{
cout<<res[i]<<" ";
}
return 0;
}