gcc是否支持amd64上的128位int?
如何定义?
如何使用scanf/printf进行读/写?
我在 C 中有一个代码,它以与人类相同的方式进行加法,因此,例如,如果我有两个数组A[0..n-1]and B[0..n-1],则该方法将执行C[0]=A[0]+B[0],C[1]=A[1]+B[1]...
我需要帮助使这个函数更快,即使解决方案使用的是内在函数。
我的主要问题是我有一个非常大的依赖问题,因为迭代i+1取决于迭代的进位i,只要我使用基数 10。所以如果A[0]=6和B[0]=5,C[0]必须是1并且我有1下一个加法的进位。
我能做的更快的代码是这样的:
void LongNumAddition1(unsigned char *Vin1, unsigned char *Vin2,
unsigned char *Vout, unsigned N) {
for (int i = 0; i < N; i++) {
Vout[i] = Vin1[i] + Vin2[i];
}
unsigned char carry = 0;
for (int i = 0; i < N; i++) {
Vout[i] += carry;
carry = Vout[i] / …Run Code Online (Sandbox Code Playgroud) 如果我有一个基数10或基数16,我该如何将其更改为2 ^ 32?
我试图这样做的原因是为了实现其他成员在这里建议的BigInt .. 为什么要使用更高的基数来实现BigInt?
它是否与整数(基数10)相同,直到2 ^ 32?它之后会发生什么?
通常,要处理超出C++中long long范围的整数,您必须将它们表示为字符串并以这种方式对它们执行操作.但是,我在互联网上发现这个代码似乎像魔术一样.它计算两个幂的总和(没有2 ^ 0),即使它不能存储在很长的长度中.
#include <iostream>
#include <cmath>
#include <iomanip>
#include <sstream>
using namespace std;
int main() {
int n;
stringstream ss;
cin >> n;
ss << fixed << setprecision(0) << pow(2, n + 1) - 2;
if (n >= 54) {
string a = ss.str();
a[a.size() - 1] = ((a[a.size() - 1] - 48) - 2) + 48;
cout << a;
return 0;
}
cout << ss.str();
}
Run Code Online (Sandbox Code Playgroud)
它是如何工作的?它适用于涉及大量的任何操作吗?如果n的值非常大(我试过1024)它只打印"inf".可以这种方式计算的数字范围的上限是多少?
以下部分到底做了什么以及它为什么这样做?
a[a.size() - 1] = ((a[a.size() - 1] - 48) …Run Code Online (Sandbox Code Playgroud) c ×3
c++ ×2
128-bit ×1
add ×1
arrays ×1
gcc ×1
largenumber ×1
numbers ×1
optimization ×1
performance ×1
stringstream ×1