高精度整数进制转换

vsmingren 2008-10-26 04:18:47
希望高手详细讲解一下
感激中···
...全文
158 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
太乙 2008-10-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 vsmingren 的回复:]
嘿嘿,不好意思
就是大整数的任意进制转换
谢谢上面几位的指教
[/Quote]

呵呵~~~lz,给你看个求pi的程序:




#include < stdio.h >
long a = 10000 ,b = 0 ,c = 2800 ,d,e,f[ 2801 ],g;
void main()
{
printf( " %d " ,b);
for (;b != c;)
{
f[b] = a / 5 ;
b ++ ;
}
for (; d = 0 ,g = c * 2 ; c -= 14 ,printf( " %.4d " ,e + d / a),e = d % a)
for (b = c;d += f[b] * a,f[b] = d %-- g,d /= g -- , -- b;d *= b);
}





题外话!呵呵,当是放松!


大数类好实现,进制的转化嘛?

可以先实现大数类的+-*/,然后再转化!


参考:

http://download.csdn.net/source/403510
vsmingren 2008-10-26
  • 打赏
  • 举报
回复
嘿嘿,不好意思
就是大整数的任意进制转换
谢谢上面几位的指教
帅得不敢出门 2008-10-26
  • 打赏
  • 举报
回复
貌似问题表述不清.
三文鱼也会飞 2008-10-26
  • 打赏
  • 举报
回复
实际上就是用字符数组实现的大整数的除法运算

以十进制为例:
#include <iostream.h>
#include <mem.h>
const int MAXSIZE = 20; //max length of the number
const int K = 10; //baniry system 在这里可以修改K进制的高精度
class hp{
int len; //length of number
int s[MAXSIZE]; //store high precistion number
public:
hp();
hp hp::operator = (hp C);
};
hp::hp()
{
len = 0;
memset(s, 0, MAXSIZE*sizeof(int));
}
istream &operator >> (istream &in, hp &HP)
{
char s[MAXSIZE];
int i;
cout << "Input Number = ";
cin >> s;
HP.len = strlen(s);
for (i = 0; i < HP.len; i++)
HP.s[i] = s[HP.len-i-1] - '0'; //change string to high precisition
return in;
}
ostream &operator << (ostream &out, hp &HP)
{
int i;
for (i = HP.len-1; i >= 0; i--)
cout << HP.s[i];
return out;
}
hp operator +(hp A, hp B)
{
int i, len;
hp C;
if (A.len > B.len)
len = A.len;
else
len = B.len; //get the bigger length of A,B
for (i = 0; i < len; i++){
C.s[i] += A.s[i] + B.s[i];
if (C.s[i] >= K){
C.s[i] -= K;
++C.s[i+1]; //add 1 to a higher position
}
}
if (C.s[len] > 0)
C.len = len+1;
else
C.len = len;
return C;
}
hp operator - (hp A, hp B) //different of the two HighPrecision Numbers
{
int len, i;
hp C;
if (A.len > B.len)
len = A.len;
else
len = B.len;C.len = 4;
for (i = 0; i < len; i++){
C.s[i] += A.s[i] - B.s[i];
if (C.s[i] < 0){
C.s[i] += K;
--C.s[i+1]; //subtract 1 to higher position
}
}
while (C.s[len-1] == 0 && len > 1)
--len;
C.len = len;
return C;
}
hp operator * (const hp &A, const hp &B)
{
int len, i, j;
hp C;
for (i = 0; i < A.len; i++)
for (j = 0; j < B.len; j++){
len = i+j;
C.s[len] += A.s[i] * B.s[j];
C.s[len+1] += C.s[len] / K;
C.s[len] %= K;
}
len = A.len + B.len + 1;
/*
the product of a number with i digits and a number with j digits
can only have at most i+j+1 digits
*/
while (len > 1 && C.s[len-1] == 0)
--len;
C.len = len;
return C;
}
hp hp::operator = (hp C)
{
int i;
len = C.len;
for (i = 0; i < MAXSIZE; i++)
s[i] = C.s[i];
return *this;
}
int main()
{
hp A, B, C;
cin >> A >> B;
C = A+B;
cout << A << ‘+’ << B << “ = “ << C << endl;
C = A-B;
cout << A << ‘-’ << B << “ = “ << C << endl;
C = A*B;
cout << A << '*' << B << " = " << C << endl;
return 0;
}

星羽 2008-10-26
  • 打赏
  • 举报
回复
高精度??是指大数吗??
baihacker 2008-10-26
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
void Convert(unsigned int n, int base, int cnt)
{
if (!cnt--) return;
Convert(n/base, base, cnt);
if(base <= 10)
{
printf("%d", n%base);
}
else
{
int t = n%base;
printf("%c", t < 10 ? t + '0' : t - 10 + 'A');
}
}

int main()
{
Convert(65536, 2, 32);
puts("");
Convert(65536, 8, 32);
puts("");
Convert(65536, 10, 32);
puts("");
Convert(65536, 16, 32);
puts("");
return 0;
}
wuyu637 2008-10-26
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20031017/13/2365997.html

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧