第一題:
思路:對於高精度整數問題,其實很簡單,就是相當於模板函式。只要背住,就沒問題了,具體思路就是用乙個 int 型陣列來存,每四位一存。但注意,用size表示大小的時候,size是從0開始自增的,size表示現在最高可以使用的空白陣列位。
**如下:
#include
#include
struct biginteger
size=0;
}void
set(
char str)
}}void
output()
printf
("\n");
} biginteger operator+(
const biginteger &a)
const
if(carry!=0)
return ret;
}}a,b,c;
char str1[
1002
],str2[
1002];
intmain()
return0;
}
第二題:
思路:這道題就是高精度乘法運算了,機試中的高精度乘法運算一般只要求乙個高精度整數與乙個普通的小整數來進行乘法。
**如下:
#include
#include
struct biginteger
size=0;
}void
set(
int x)
while
(x!=0)
;}void
output()
printf
("\n");
} biginteger operator*(
int x)
const
if(carry!=0)
return ret;
}}a;
intmain()
a.output()
;}return0;
}
第三題:
思路:這道題,其實思路就是普通的進製轉換,涉及到位權相乘的問題。但是其中有大資料,所以就變為高精度整數之間的進製轉換問題。其中涉及到,高精度整數與普通整數的乘積,高精度整數之間求和,高精度整數除以普通整數,高精度整數對普通整數求模等。
**如下:
#include
#include
#define maxdigits 100
struct biginteger
void
set(
int x)
while
(x!=0)
;}void
output()
printf
("\n");
} biginteger operator*(
const
int&x)
const
if(carry!=0)
return ret;
} biginteger operator+(
const biginteger &a)
const
if(carry!=0)
return ret;
} biginteger operator/(
const
int&x)
const
ret.size=0;
for(
int i=
0;i) ret.size++
;return ret;
}int
operator%(
const
int&x)
const
return remainder;
}}a,b,c;
//高精度整數模板類
char str[
10000
],ans[
10000];
intmain()
else t=str[i]
-'a'+10
; a=a+b*t;
b=b*m;
}//轉換為10進製
int size=0;
dowhile
(a.digit[0]
!=0||a.size!=1)
;//十進位制轉換為相應的進製
for(
int i=size-
1;i>=
0;i--
)printf
("%c"
,ans[i]);
printf
("\n");
}return0;
}
ACM演算法 數學問題篇 運算子
運算子的簡介 定義 通俗地講即求乙個數被另乙個數除後剩餘的餘數。區分 除 除以 a 除以 b a b,表示 a 被 b 除了,即 a 是被除數,b是除數。a 除 b b a,表示用 a 去除 b,這是被動關係,即 b 是被除數,a 是除數。若 a b 其中要求 a 和 b 必須為整形變數 例如 in...
ACM學習筆記之 數學問題 素數
素數是非常簡單的乙個概念,所謂素數,是指恰好有2個約數 的整數,那麼這兩個數就是它本身和1。素數的判定方法有這麼幾種,1 簡單判定,2 飛馬測試 3 r 演算法 4 數域篩法 5 埃式篩法 6 區間篩法 那麼先從最簡單的判素方法學起 1.素性測試 給定整數n,請判斷n是不是素數 includeboo...
ACM選修課1 數學問題
memset 函式 memset 陣列名,1 0 1,sizeof a 重置為1是陣列為任意正數 求乙個數的位數 int log10 n 1,公式log10 i i 必須為double型別 the hardest problem ever include using namespace std in...