非常大的值计算和存储问题
求大神,怎么计算一个非常大的值,比如9的21次方? 用double吧,表示范围比较大,负值取值范围为 -1.7976E+308 到 -4.94065645841246544E-324,正值取值范围为 4.94065645841246544E-324 到 1.797693E+308。 pow(9,21) 致年轻的我们 发表于 2016-11-27 12:17用double吧,表示范围比较大,负值取值范围为 -1.7976E+308 到 -4.94065645841246544E-324,正值取值范围为 ...
比double还大的怎么办?
#include <iostream>
#include <stack>
using namespace std;
stack<char> add(stack<char> a, stack<char> b)
{
static stack<char> r;
int c = 0; // 进位
while((a.empty() == false) && (b.empty() == false))
{
int t = (a.top() - '0') + (b.top() - '0') + c;
if(t >= 10)
{
c = 1;
t -= 10;
}
else
{
c = 0;
}
r.push(t + '0');
a.pop();
b.pop();
}
if(a.empty() == false)
{
while(a.empty() == false)
{
int t = (a.top() - '0') + c;
if(t >= 10)
{
c = 1;
t -= 10;
}
else
{
c = 0;
}
r.push(t + '0');
a.pop();
}
}
else
{
while(b.empty() == false)
{
int t = (b.top() - '0') + c;
if(t >= 10)
{
c = 1;
t -= 10;
}
else
{
c = 0;
}
r.push(t + '0');
b.pop();
}
}
if(c == 1)
{
r.push('1');
}
return r;
}
int main(void)
{
stack<char> c1, c2, c3;
cout << "大数加法\n" << "请输入第一个数,以#符合结尾:";
do
{
char ch;
cin >> ch;
c1.push(ch);
} while(c1.top() != '#');
c1.pop(); // 去掉#符号
cout << "请输入第二个数,以#符合结尾:";
do
{
char ch;
cin >> ch;
c2.push(ch);
} while(c2.top() != '#');
c2.pop(); // 去掉#符号
c3 = add(c1, c2);
cout << "结果是:\n";
while(c3.empty() == false)
{
cout << c3.top();
c3.pop();
}
cout << '\n';
return 0;
} 建议用汇编语言的adc指令来实现.... 人造人 发表于 2016-11-27 16:54
那比如我要计算9的21次方呢?或者其他一个数的很大次方 学习电脑 发表于 2016-11-28 16:26
那比如我要计算9的21次方呢?或者其他一个数的很大次方
那就自己写那个pow函数 用char 的数组来做 stalinwang 发表于 2016-11-28 20:46
用char 的数组来做
我都知道用数组,但怎么实现?
页:
[1]