Ice*_*lla 5 c algorithm bignum
我正在用C语言构建一个可以获得权限的程序2.用户输入值n,程序计算2^n.
这是代码.
输入时出现问题 100
我得到了什么:
1,267,650,600,228,229,400,000,000,000,000
Run Code Online (Sandbox Code Playgroud)
我应该得到什么
1,267,650,600,228,229,401,496,703,205,376
Run Code Online (Sandbox Code Playgroud)
它必须完全用ANSI C编码.关于如何提高精度的任何想法?最大值N必须是256(256位,我想,这意味着最大输出应该是2^256).
我在这里缺少的是精确度,我不知道如何解决这个问题.有任何想法吗?
这是我对哈马尔方法的快速而肮脏的实现。,将十进制数存储为 C 字符串,并以相反的顺序排列数字。
void doubleDecimal(char * decimal)
{
char buffer[256] = "";
char c;
unsigned char d, carry = 0;
int i = 0;
while (c = decimal[i])
{
d = 2 * (c - '0') + carry;
buffer[i] = (d % 10) + '0';
carry = d / 10;
i++;
}
if (carry > 0)
buffer[i++] = (carry % 10) + '0';
buffer[i] = '\0';
strncpy(decimal, buffer, 256);
}
void reverse(char * str)
{
int i = 0;
int j = strlen(str) - 1;
while (j > i)
{
char tmp = str[i];
str[i] = str[j];
str[j] = tmp;
i++;
j--;
}
}
int main(void)
{
char decimal[256] = "1";
int i;
for (i = 0; i < 100; i++)
doubleDecimal(decimal);
reverse(decimal);
printf("%s", decimal);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
1267650600228229401496703205376
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
330 次 |
| 最近记录: |