Надеюсь, вы найдете это полезным.
HTML:
<html>
<head>
<link rel = "stylesheet" href = "test.css">
<body>
</body>
<script src = "test.js"></script>
</head>
</html>
JAVASCRIPT:
var tableString = "<table>",
body = document.getElementsByTagName('body')[0],
div = document.createElement('div');
for (row = 1; row < 101; row += 1) {
tableString += "<tr>";
for (col = 1; col < 11; col += 1) {
tableString += "<td>" + "row [" + row + "]" + "col [" + col + "]" + "</td>";
}
tableString += "</tr>";
}
tableString += "</table>";
div.innerHTML = tableString;
body.appendChild(div);
В C ++ нет переносимого способа сделать это, поскольку язык не определяет размер целочисленных типов (за исключением того, что sizeof char равен 1). Вам необходимо обратиться к документации вашего компилятора.
Используйте long long
и, если возможно, добавьте во время компиляции утверждение, что этот тип достаточно широк (что-то вроде sizeof (long long)> = 8
]).
double
предназначен для чисел с плавающей запятой, а не целых.
Попробуйте:
http://gmplib.org/ большое число.
http://mattmccutchen.net/bigint/ большое число
Я не использовал ни того, ни другого, но я использовал похожие вещи в Java.
Оба предложения не подходят, потому что long long не является стандартным типом данных C ++, а double - с плавающей запятой.
Поскольку моя программа должна быть переносимой, я собираюсь #define мои собственные типы, которые подходят для всех компиляторов, которые я использую (Visual Studio и gcc):
#ifdef WIN32
#define unsigned_long_long unsigned __int64
#define long_long __int64
#else // gcc. Might not work on other compilers!
#define unsigned_long_long unsigned long long
#define long_long long long
#endif
Я предполагаю, что ваши числа уместятся в 64 бита. Если нет, тогда вам понадобится арифметическая библиотека произвольной точности , например GMP .
Теоретически нет простого переносимого способа выполнять 64-битные математические вычисления на C ++. На практике большинство компиляторов C ++ также поддерживают «старомодные» заголовки C, а C99 имеет красивый заголовок под названием stdint.h .
Итак, сначала выполните:
#include <stdint.h>
Затем используйте типы int64_t
(подписанный) и uint64_t
(беззнаковый).
ИЗМЕНИТЬ ДОБАВИТЬ: После того, как я написал этот ответ, C ++ 11 добавил заголовок
(* Теоретически система может вообще не поддерживать 64-битный тип.
Не используйте double, потому что:
cout.setf(ios::fixed);
cout << LONG_LONG_MAX << endl;
cout << double(LONG_LONG_MAX) << endl;
cout << LONG_LONG_MAX-100 << endl;
cout << double(LONG_LONG_MAX-100) << endl;
Вывод:
9223372036854775807
9223372036854775808.000000
9223372036854775707
9223372036854775808.000000
Если вам не нужны отрицательные числа, то беззнаковое длинное длинное длинное звучит больше всего, что вы можете получить.
Попробуйте TTMath . Все, что вам нужно сделать, это включить один заголовок, а затем объявить тип bignum, например:
typedef ttmath::UInt<100> BigInt;
, который создает тип, который может содержать беззнаковые целые числа от 0 до 2 ^ (32 * 100) -1.
Затем просто используйте BigInt
везде, где вы бы использовали int
.
Конечно, вы можете выбрать любой размер для параметра шаблона. 100 может быть излишним; -)
Только что понял, библиотека работает только на x86 и x64, но является кроссплатформенной ОС на этих процессорах.
Многие современные компиляторы C / C ++ имеют заголовок stdint.h или inttypes.h.
int_fast64_t
или int64_t
может быть вариант (ИМХО самый портативный).
Насколько переносимой должна быть ваша программа? В TR1 есть cstdint и stdint.h, поэтому он, вероятно, поддерживается большинством современных компиляторов. Затем есть Boost cstdint.hpp, который вы сможете использовать, если cstdint не поддерживается.
Если у вашего компилятора немного long, вы можете реализовать их самостоятельно со структурой, содержащей два long, но вам нужно будет осторожно переносить и т. Д. Вы, конечно, можете поискать арифметику с множественной точностью например GMP
Двойные значения с плавающей запятой. Возможно, вам стоит использовать long long. Я не знаю, какой псевдоним предпочтительнее.