主题:[原创]输出2的100次方个数字,怎么办?
巧克力公主
[专家分:0] 发布于 2010-10-08 17:43:00
[em1]
回复列表 (共5个回复)
沙发
cgl_lgs [专家分:21040] 发布于 2010-10-08 23:19:00
高精度乘法。
板凳
josephkwok [专家分:530] 发布于 2010-10-25 10:05:00
大概思想是这样的.其实就是编码而已.
用1个int数组(也可以是其他),每个int记录一定个数的数字,例如5个,
如果int a[3];
a[0]=1;a[1]=2;a[2]=3;
那么我们就约定a表示10进制数123,那这个a最大能表示的10进制数是
999999999999999,总共15个9.
现在解析下乘法
如果a[0]=0;a[1]=1;a[2]=50000;
那么a就表示150000,然后a*2.
就将a的所有元素乘以2,得a[0]=0;a[1]=2;a[2]=100000;
a[2]超过1开始约定的5位,进位得a[0]=0;a[1]=3;a[2]=0;
所以这时的a表示300000了
3 楼
1054122 [专家分:750] 发布于 2010-11-05 21:12:00
不用高精度乘法,直接高精度幂
4 楼
1054122 [专家分:750] 发布于 2010-11-05 21:13:00
程序在这里
5 楼
1054122 [专家分:750] 发布于 2010-11-05 21:14:00
[code=c]
#include <iostream>
using namespace std;
int main()
{
int k[1000] = {0} , p = 0 , c = 0;
k[1] = 1;
for (int i = 1 ; i <= 100 ; i++)
{
for (int j = 1 ; j <= 999 ; j++)
{
k[j] = k[j] * 2 + p;
if (k[j] >= 10)
{
k[j] = k[j] - 10;
p = 1;
}
else
p = 0;
}
}
for (int i = 999 ; i >= 1 ; i--)
{
if (k[i] != 0)
c = 1;
if (c)
cout << k[i];
}
cout << endl;
system("pause");
return 0;
}[/code]
我来回复