标准输入输出真奇怪,我貌似明白了为什么之前学姐会说格式控制符不会四舍五入了
和c++一样丢精度????
这里先将进制转换吧
进制用自带的只能在8 10 16之间转
下面是用栈写的二进制转化
进制转换 (两种方式,一个获得正序,一个获得逆序)
#include <iostream>
#include <iomanip>
#include<cstdio>
#include<cmath>
#include<stack>
using namespace std;
typedef unsigned long long ull;
const ull MOD=0x3f3f3f3f3f;
const double PI=3.1415926;
string transfer(int a)
{
if(a==0)
cout<<"0"<<endl;
string temp="";
stack<char>mystack;
while(a>0)
{
if(a%2)
{
mystack.push('1');
temp+="1";
}
else
{
mystack.push('0');
temp+="0";
}
a/=2;
}
while(!mystack.empty())
{
cout<<mystack.top();
mystack.pop();
}
cout<<endl;
return temp;
}
int main()
{
int a;
cin>>a;
//十进制转二进制
string temp;
temp=transfer(a);
for(int i=temp.length()-1;i>=0;i--)
cout<<temp[i];
return 0;
}
进制输入输出(cin 和cout的进制设置是分开的由于fixed只是cout才有,这一特性昨天没发现)
记住那几个进制表示词(这里首字母小写,并且缩写了一些)
oct八进制
dec十进制
hex十六进制
演示代码
#include <iostream>
#include <iomanip>
#include<cstdio>
#include<cmath>
#include<stack>
using namespace std;
typedef unsigned long long ull;
const ull MOD=0x3f3f3f3f3f;
const double PI=3.1415926;
int main()
{
int a;
while(cin>>dec>>a)
{
int f=0;
if(a<0)
{
cout<<"-";
a=-a;
f=1;
}
cout<<a<<" = "<<oct;
if(f)
cout<<"-";
cout<<a<<"(8)"<<" = "<<hex;
if(f)
cout<<"-";
cout<<a<<"(16)"<<dec<<endl;
}
return 0;
}
tips:如果是在2 8 16之间转化,
可以利用其关系(取3位或四位)快速解决
时间快,但是有2 8 10的条件而且代码也难写T^T
补码之类的概念有时间再补上