今天想試著實現了一些c++大數的操作,忙活的時間不少,只不過就實現了加減法,乘除的方法只能有時間再來實現了。
說點心得,我下面大數的儲存方式很蠢(起初沒想著實現負數
#include#include#include#include#include#include#include#include#include#define mem(array) memset((array),0,sizeof((array)))
#define qsort(array,len,cmp) qsort(array,len,sizeof(array[0]),cmp)
#define inf 0x7fffffff
#define maxn 1000
#define biglen 1000
#define bigcarry 1000
using namespace std;
int comparebig(int *a, int *b);
int gettopdigits(int *a);
int getbiglen(int *a);
int* addbig(int *sum,int *a, int *b);
int* addsmall(int *sum,int *big, int small);
int* subtractbig(int *sub,int *a,int *b);
int* subtractsmall(int *sub,int *big, int small);
int outputbig(int *a);
int comparebig(int *a, int *b) /*** if a > b then return 1 while return -1 when a < b ,other case(a = b) return 0 */
}return 0;
}int gettopdigits(int *a)
}int getbiglen(int *a)
/***
int digits;
if(abs(a[cnt]) >= 100)
digits = 3;
else if(abs(a[cnt]) >= 10)
digits = 2;
else if(abs(a[cnt]) >= 0)
digits = 1;
else
return -1;
digits += cnt*(int)log10(biglen);
return digits;
*/}int* addbig(int *sum,int *a, int *b) /*** sum = a + b */
return sum;
}else if(atopdigits >= 0 && btopdigits < 0)
else if(atopdigits < 0 && btopdigits >= 0)
else if(atopdigits < 0 && btopdigits < 0)
int index_1 = getbiglen(t1)-1;
int index_2 = getbiglen(t2)-1;
t1[index_1] = -t1[index_1];
t2[index_2] = -t2[index_2];
addbig(sum,t1,t2);
delete t1,t2;
int index = getbiglen(sum) - 1;
sum[index] = -sum[index];
return sum;
}}int* addsmall(int *sum,int *big, int small) /**** sum = big + small , compute a big number and a small number , big number must be greater than 0 */
while(index < biglen)
sum[index] = big[index++];
return sum;
}int* subtractbig(int *sub,int *a,int *b) /*** sub = a - b */
if(carry)
}return sub;
}else if(atopdigits >= 0 && btopdigits < 0)
else if(atopdigits < 0 && btopdigits >= 0)
else if(atopdigits < 0 && btopdigits < 0)
int index_1 = getbiglen(t1) - 1;
int index_2 = getbiglen(t2) - 1;
t1[index_1] = -t1[index_1];
t2[index_2] = -t2[index_2];
subtractbig(sub,t2,t1);
delete t1,t2;
return sub;
}}int* subtractsmall(int *sub,int *big, int small) /**** sub = big - small , compute a big number and a small number , big number must be greater than 0 */
t = carry % bigcarry;
carry /= bigcarry;
}while(index < biglen)
sub[index] = big[index++];
return sub;
}int outputbig(int *a)
for(int i = index-1; i >= 0; --i)
printf("%03d",a[i]);
if(index == -1)
cout<<0;
cout<
操作大資料集
1 語法 insert into table column column subquery 2 說明 您可以使用insert語句向乙個表中新增行,其中的值來自於查詢結果集。插入子句的列列表中列及其資料型別的數量必須與子查詢中的值和資料型別相匹配。3 例句 insert into empl3 sele...
c 大數類 大數模板
分類 大數 hdoj 分別使用c 中的運算子過載的方法來實現大數之間的數 算,包括加法 減法 乘法 除法 n次方 取模 大小比較 賦值以及輸入流 輸出流的過載。並且使用這個大數模板,順利ac了hdoj上的1134這個題目的catalan數計數問題。大數模板的 如下 cpp view plain co...
c 大數類 大數模板
分別使用c 中的運算子過載的方法來實現大數之間的數 算,包括加法 減法 乘法 除法 n次方 取模 大小比較 賦值以及輸入流 輸出流的過載。並且使用這個大數模板,順利ac了hdoj上的1134這個題目的catalan數計數問題。大數模板的 如下 cpp view plain copy include ...