gpt4 book ai didi

c++ - 从二进制补码转换为十进制

转载 作者:行者123 更新时间:2023-11-30 01:54:54 25 4
gpt4 key购买 nike

您可能熟悉有符号整数的二进制补码表示。它是当今使用最广泛的二进制整数表示法。鲜为人知的是其他一些二进制整数表示的提议,包括基数 -2。 Base -2 共享二进制补码的算术便利,并且可能更容易描述。 (参见 http://en.wikipedia.org/wiki/Signed_number_representations)

一个例子:1011 是 1*(-2)^3 + 0*(-2)^2 + 1*(-2)^1 + 1*(-2)*0 = -8 + 0 + - 2 + 1 = -9

输入

第一个数字 T(从 1 到 100)是要从基数 -2 转换为基数 10 的整数数。

接下来的 T 个数字是基数 -2(每个 1 到 15 位数字)。

注意:数字左边可以补0。

输出

输出数字的带符号基数 10 表示,以空格分隔。


以下是我的C++代码;它几乎只是使用上面示例中的方法与1011。在我自己的测试用例中它可以正常工作,但是当我在在线法官上提交时,它给出了错误的答案。我认为它可能会溢出。关于如何改进我的代码的任何建议。谢谢!

#include<iostream>
#include<math.h>
using namespace std;
long long int convert (long long int base, long long int num){
long long int exp=0;
long long int output=0;
while (num != 0){
long long int digit = num - 10*int(num/10);
output += digit * pow(base, exp);
exp++;
num = int(num/10);


}
return output;
}
int main(){
int cases;
cin >> cases;
long long int input;
long long int base = -2;
cin >> input;
cout << convert(base, input);
for (int i=1; i< cases; i++){
cin >> input;
cout << " " << convert(base, input);
}

return 0;
}

最佳答案

数字是一个抽象的概念,可以用手指表达(例如)。

算术以称为编号系统的不同方式指示该抽象数字的表示。

因此,如果您更喜欢,可以将数字映射到一串数字或数字序列。

您定义的函数 convert 接受一个数字和一个基数并将其转换为数字。所以它没有将该数字表示为数字序列。

关于c++ - 从二进制补码转换为十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21357093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com