全心思齐网

c语言128位是什么?

编译器的gcc是不支持__int128这种数据类型的,比如在codeblocks 16.01/Dev C++是无法编译的,但是提交到大部分OJ上是可以编译且能用的。C/C++标准。IO是不认识__int128这种数据类型的,因此要自己实现IO,其他的运算,与int没有什么不同。

但是官方上写了GCC提供了两种128位整数类型,分别是__int128_t和__uint128_t,分别用于声明有符号整数变量和无符号整数变量。

由于这种大整数无法使用函数printf()输出其值,所以自己做了一个整数转字符串函数write(),用于实现128位整数的输出。

亲测oj和洛谷可以AC

加法模板如下

#include <bits/stdc++.h>

using namespace std;

inline __int128 read()

{

__int128 x=0,f=1;

char ch=getchar();

while(ch<'0'||ch>'9')

{

if(ch=='-')

f=-1;

ch=getchar();

}

while(ch>='0'&&ch<='9')

{

x=x*10+ch-'0';

ch=getchar();

}

return x*f;

}

inline void write(__int128 x)

{

if(x<0)

{

putchar('-');

x=-x;

}

if(x>9)

write(x/10);

putchar(x%10+'0');

}

int main()

{

__int128 a = read();

__int128 b = read();

write(a + b);

return 0;

}

匿名回答于2024-05-25 17:07:22


在C语言中,并没有任何数据类型可以表示精确的128位数。所以要表示128位数,就必须用数组模拟。比如,用字符数组模拟,每位字符表示一位数,使用'0'~'9'表示各个位上的数值。

例如:

char num[129] = "12345678……";

表示数字12345678。 由于128位过长,就不举128位的例子了。

输入输出均可以用字符串的方式。

另外,做计算的话,就必须自己写函数了,如加减乘除模除等,对于这类实现,在算法中称为大数计算,如果需要,可以对此进行搜索,有很多优秀算法。

匿名回答于2024-05-06 11:16:41


相关知识问答